社区讨论
为什么我才60分玄关
P11361[NOIP2024] 编辑字符串参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mi0vi4w6
- 此快照首次捕获于
- 2025/11/16 06:43 4 个月前
- 此快照最后确认于
- 2025/11/16 13:40 4 个月前
C
#include <bits/stdc++.h>
using namespace std;
const int N=1e5+3;
struct Node{
int sum0,sum1;
}str[2*N];
int n,ans,x[N],y[N],a[N],b[N],cnt;
int main(){
int T;cin >>T;
while(T--){
cnt=ans=0;
string tstr;cin >>n;
for(int i=0;i<n;i++)str[i].sum0=str[i].sum1=0;
cin >>tstr;for(int i=0;i<n;i++)a[i]=tstr[i]-'0';
cin >>tstr;for(int i=0;i<n;i++)b[i]=tstr[i]-'0';
cin >>tstr;
for(int i=0;i<n;i++){
if(tstr[i]=='1'){
x[i]=cnt;
if(a[i]==0)str[cnt].sum0++;
else str[cnt].sum1++;
}
else x[i]=-1,cnt++;
}
cnt++,cin >>tstr;
for(int i=0;i<n;i++){
if(tstr[i]=='1'){
y[i]=cnt;
if(b[i]==0)str[cnt].sum0++;
else str[cnt].sum1++;
}
else y[i]=-1,cnt++;
}
x[n]=y[n]=-1;
for(int i=0;i<n;i++){
if(x[i]==-1||y[i]==-1){
if(x[i]==-1&&y[i]!=-1){
if(a[i]==0&&str[y[i]].sum0)str[y[i]].sum0--,ans++;
else if(a[i]==1&&str[y[i]].sum1)str[y[i]].sum1--,ans++;
}
else if(x[i]!=-1&&y[i]==-1){
if(b[i]==0&&str[x[i]].sum0)str[x[i]].sum0--,ans++;
else if(b[i]==1&&str[x[i]].sum1)str[x[i]].sum1--,ans++;
}
else if(x[i]==-1&&y[i]==-1){
if(a[i]==b[i])ans++;
}
}
else if(x[i+1]==-1||y[i+1]==-1){
if(str[x[i]].sum0>str[y[i]].sum0){
ans+=str[y[i]].sum0;
str[x[i]].sum0-=str[y[i]].sum0;
str[y[i]].sum0=0;
}
else if(str[x[i]].sum0<=str[y[i]].sum0){
ans+=str[x[i]].sum0;
str[y[i]].sum0-=str[x[i]].sum0;
str[x[i]].sum0=0;
}
//
if(str[x[i]].sum1>str[y[i]].sum1){
ans+=str[y[i]].sum1;
str[x[i]].sum1-=str[y[i]].sum1;
str[y[i]].sum1=0;
}
else if(str[x[i]].sum1<=str[y[i]].sum1){
ans+=str[x[i]].sum1;
str[y[i]].sum1-=str[x[i]].sum1;
str[x[i]].sum1=0;
}
}
}
cout <<ans<<"\n";
}
return 0;
}
好像是细节出错了awa
回复
共 0 条回复,欢迎继续交流。
正在加载回复...