问一个关于Div2 B的问题
  • 板块学术版
  • 楼主liuenyin
  • 当前回复6
  • 已保存回复6
  • 发布时间2024/7/13 19:25
  • 上次更新2024/7/13 20:35:43
查看原帖
问一个关于Div2 B的问题
892979
liuenyin楼主2024/7/13 19:25

刚才div2 B求问,大概思路就是将每一个需要操作的区间(两个字符串不一样)的地方记录下来,如果能合并就合并,但是拿了暴力分(对拍8以下的数据没问题)。想问一下是做法假了还是出现了什么问题。

LOJ的数据(重题)没过,应输出5,实际输出6

1
001100010010000110
110110001000100101

另外除subtask1外的所有点全wa,没有TLE

如果能给个数据解释也非常感谢。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e5+5;
char t[N],s[N];
int T,ans,lst,nxt,is0,is1,n;
struct node{
    int l,r;
    bool qs0,qs1;
    node(int ll,int rr,bool is0,bool is1){
        l=ll,r=rr;qs0=is0,qs1=is1;
    }
    bool operator<(const node &A)const {
        return this->l<A.l;
    }
};
deque<node> q;
int qzh[N];
int main(){
    //freopen("in.txt","r",stdin);
    //freopen("my.txt","w",stdout);
    cin>>T;
    //int loj_n;
    //cin>>loj_n;
    while(T--){
        cin>>(s+1)>>(t+1);
		while(q.size())q.pop_back();
		is0=is1=1;
		nxt=0;
		lst=0;
		n=strlen(s+1);
        for(int i=1;i<=n;i++){
            qzh[i]=qzh[i-1]+(t[i]-'0');
            if(s[i]==t[i]){
                if(nxt!=0){
                    q.push_back(node(lst+1,nxt,is0,is1));
                    nxt=0;
                    is0=1;is1=1;
                }
                lst=i;
                is0=1;is1=1;
            }
            else{
                if(t[i]=='1')is0=0;
                else is1=0;
                nxt=i;
            }
        }
		if(nxt!=0){
            q.push_back(node(lst+1,nxt,is0,is1));
            nxt=0;
        }
        if(!q.size()){
            cout<<0<<endl;continue;
        }
        int flag=1;
        while(q.size()>1){
            node t1=q.front();q.pop_front();
            node t2=q.front();q.pop_front();
            //cout<<t1.l<<" "<<t1.r<<" "<<t2.l<<" "<<t2.r<<endl;
            if(t2.l<t1.r){
                q.push_front(t2);
                q.push_back(t1);
                if(!flag){
                    break;
                }
                flag=0;
				continue;
            }
            if(t1.qs0 and t2.qs0 and qzh[t2.l]-qzh[t1.r]==0){
                node t3(t1.l,t2.r,1,0);
                q.push_front(t3);
                flag=1;
            }
            else if(t1.qs1 and t2.qs1 and qzh[t2.l]-qzh[t1.r]==t2.l-t1.r){
                q.push_front(node(t1.l,t2.r,0,1));
                flag=1;
            }
            else{
                q.push_back(t1);
                q.push_front(t2);
            }
        }

        cout<<q.size()<<endl;
    }
    return 0;
}
2024/7/13 19:25
加载中...