社区讨论
大样例能过但不确定,有DALAO帮忙看看吗
P11361[NOIP2024] 编辑字符串参与者 3已保存回复 3
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 3 条
- 当前快照
- 1 份
- 快照标识符
- @m44tvz10
- 此快照首次捕获于
- 2024/12/01 07:53 去年
- 此快照最后确认于
- 2025/11/04 13:32 4 个月前
CPP
#include<bits/stdc++.h>
#define ll signed long long
#define int signed long long
#define max(a,b) (a>b?a:b)
#define min(a,b) (a<b?a:b)
using namespace std;
const int maxn=1e6,inf=1e18;
inline int read() {
int f = 1, x = 0;char ch = getchar();
while (ch < '0' || ch > '9'){if (ch == '-')f *= -1;ch = getchar();}
while (ch >= '0' && ch <= '9')x = (x << 1) + (x << 3) + ch - 48, ch = getchar();
return x * f;
}
signed main()
{
int t=read();
while(t--)
{
int n,s11=0,s10=0,s21=0,s20=0,r1=0,r2=0,ans=0;cin>>n;
string s1,s2;cin>>s1>>s2;
string t1,t2;cin>>t1>>t2;
s1="%"+s1,s2="%"+s2,t1="0"+t1+"0",t2="0"+t2+"0";
for(int i=1;i<=n;)
{
if(t1[i-1]=='0')
{
int j=i;
s11=s10=0;
while(t1[j]!='0') s11+=(s1[j]=='1'),s10+=(s1[j]=='0'),j++;
r1=j;
}
if(t2[i-1]=='0')
{
int j=i;
s21=s20=0;
while(t2[j]!='0') s21+=(s2[j]=='1'),s20+=(s2[j]=='0'),j++;
r2=j;
}
if(t1[i]==t2[i]&&t1[i]=='0') ans+=(s1[i]==s2[i]),i++;
else if(t1[i]=='0')
{
if(s1[i]=='1'&&s21>0) s21--,ans++;
else if(s1[i]=='1') s20--;
else if(s1[i]=='0'&&s20>0) s20--,ans++;
else s21--;
i++;
}
else if(t2[i]=='0')
{
if(s2[i]=='1'&&s11>0) s11--,ans++;
else if(s2[i]=='1') s10--;
else if(s2[i]=='0'&&s10>0) s10--,ans++;
else s11--;
i++;
}
else
{
int r=min(r1,r2);
ans+=min(s11,s21)+min(s10,s20);
int k1=s11,k2=s10,k3=s21,k4=s20;
s11=max(k1-k3,0),s10=max(k2-k4,0),s21=max(k3-k1,0),s20=max(k4-k2,0);
if(r1>=r2) s11-=s20,s10-=s21;
else s21-=s10,s20-=s11;
i=r;
}
}
cout<<ans<<"\n";
}
}
回复
共 3 条回复,欢迎继续交流。
正在加载回复...