社区讨论

代码爆0求调

P11361[NOIP2024] 编辑字符串参与者 1已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@mieiyxgr
此快照首次捕获于
2025/11/25 20:01
3 个月前
此快照最后确认于
2025/11/25 20:44
3 个月前
查看原帖
CPP
#include<bits/stdc++.h>
using namespace std;
string a,b,c,d;
struct node{
	int l,r,num=0,numm=0;
}q[1000001],qq[1000001];
int main(){
	int T,n;
	cin>>T;
	while(T--){
		int cnt=0,cntt=0,ans=0;
		cin>>n>>a>>b>>c>>d;
		int flag=-1,num=0,numm=0;
		for(int i=0;i<n;i++){
			if(c[i]=='1'){
				if(a[i]=='0') num++;
				else numm++;
			}
			if(c[i]=='1'&&flag==-1){
				q[++cnt].l=i;
				flag=0;
			}
			if(c[i]=='1'&&c[i+1]=='0'){
				q[cnt].r=i;
				q[cnt].num=num;
				q[cnt].numm=numm;
				num=0,numm=0;
				flag=-1;
			}
			if(i==n-1&&c[i]=='1'){
				q[cnt].r=i;
				q[cnt].num=num;
				q[cnt].numm=numm;
				num=0,numm=0;
			}
		}
		flag=-1,num=0,numm=0;
		for(int i=0;i<n;i++){
			if(d[i]=='1'){
				if(b[i]=='0') num++;
				else numm++;
			}
			if(d[i]=='1'&&flag==-1){
				qq[++cntt].l=i;
				flag=0;
			}
			if(d[i]=='1'&&d[i+1]=='0'){
				qq[cntt].r=i;
				qq[cntt].num=num;
				qq[cntt].numm=numm;
				num=0,numm=0;
				flag=-1;
			}
			if(i==n-1&&d[i]=='1'){
				qq[cntt].r=i;
				qq[cntt].num=num;
				qq[cntt].numm=numm;
				num=0,numm=0;
			}
		}
		int sum=1,summ=1;
		for(int i=0;i<n;i++){
			if(i>q[sum].r) sum++;
			if(i>qq[summ].r) summ++;
			if(c[i]=='0'&&d[i]=='0'){
				if(a[i]==b[i]) ans++;
				else continue;
			}
			if(c[i]=='0'&&d[i]=='1'){
				if(a[i]=='0'){
					if(qq[summ].num>=1){
						ans++;
						qq[summ].num--;
					}
					else qq[summ].numm--;
				}
				if(a[i]=='1'){
					if(qq[summ].numm>=1){
						ans++;
						qq[summ].numm--;
					}
					else qq[summ].num--;
				}
			}
			if(c[i]=='1'&&d[i]=='0'){
				if(b[i]=='0'){
					if(q[sum].num>0){
						ans++;
						q[sum].num--;
					}
					else q[sum].numm--;
				}
				if(b[i]=='1'){
					if(q[sum].numm>0){
						ans++;
						q[sum].numm--;
					}
					else q[sum].num--;
				}
			}
			if(c[i]=='1'&&b[i]=='1'){
				if(q[sum].num>0&&qq[summ].num>0){
					ans++;
					q[sum].num--;
					qq[summ].num--;
				}
				else if(q[sum].numm>0&&qq[summ].numm>0){
					ans++;
					q[sum].numm--;
					qq[summ].numm--;
				}
				else{
					if(q[sum].num>0){
						q[sum].num--;
						qq[summ].numm--;
					}
					else if(q[sum].numm>0){
						q[sum].numm--;
						qq[summ].num--;
					}
				}
			}			
		}
		cout<<ans;
	} 
}

回复

1 条回复,欢迎继续交流。

正在加载回复...