社区讨论
求大佬优化
AT_agc019_d [AGC019D] Shift and Flip参与者 2已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @lobmu8nt
- 此快照首次捕获于
- 2023/10/29 23:35 2 年前
- 此快照最后确认于
- 2023/11/04 04:23 2 年前
CPP
//#pragma GCC optimize(2)
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
char A[2005];
char B[2005];
int n;
bool bc[2005];
int L[2005],R[2005];
int ans=1e9;
int s[2005],pos;
int cnta,cntb;
bool cmpR(int a,int b){return R[a]<R[b];}
bool cmpL(int a,int b){return L[a]<L[b];}
void solve(){
for(int i=1;i<=n;i++)
cnta+=(A[i]=='1'),cntb+=(B[i]=='1');
if(cntb==0){
// puts("czz");
if(cnta==0) printf("0\n");
else printf("-1\n");
return ;
}
for(int i=1;i<=n;i++){
int cnt=0;
for(int j=i;B[j]!='1';j--,cnt++)
if(j==1) j=n+1;
L[i]=cnt;
cnt=0;
for(int j=i;B[j]!='1';j++,cnt++)
if(j==n+1) j=1;
R[i]=cnt;
}
// for(int i=1;i<=n;i++) printf("%d %d %d\n",i,L[i],R[i]);
for(int i=1;i<=n;i++){
int minn=1e9,maxx=0;
int z=(i==1?0:n-i+1),sum=0;
for(int j=1;j<=n;j++) bc[j]=0;
for(int j=1,k=i;j<=n;j++,k++){
if(k>n) k-=n;
if(B[k]!=A[j]) bc[j]=1,sum++;
}
// printf("%d\n",sum);
pos=0;
for(int j=1;j<=n;j++)
if(bc[j] && L[j]>z) s[++pos]=j;
sort(s+1,s+1+pos,cmpR);
if(pos){
minn=min(minn,R[s[pos]]*2+z);
maxx=L[s[pos]];
for(int j=pos-1;j>0;j--){
minn=min(minn,R[s[j]]*2+maxx*2-z);
maxx=max(maxx,L[s[j]]);
}
minn=min(maxx*2-z,minn);
}
else minn=z;
// printf("L\n%d %d\n",i,minn);
ans=min(ans,minn+sum);
minn=1e9,maxx=0,z=i-1;
pos=0;
for(int j=1;j<=n;j++)
if(bc[j]==1 && R[j]>z) s[++pos]=j;
sort(s+1,s+1+pos,cmpL);
if(pos){
minn=min(minn,L[s[pos]]*2+z);
maxx=R[s[pos]];
for(int j=pos-1;j>0;j--){
minn=min(minn,L[s[j]]*2+maxx*2-z);
maxx=max(maxx,R[s[j]]);
}
minn=min(maxx*2-z,minn);
}
else minn=z;
// printf("R\n%d %d\n",i,minn);
ans=min(ans,minn+sum);
}
printf("%d\n",ans);
}
int main(){
// freopen("ring.in","r",stdin);
// freopen("ring.out","w",stdout);
scanf("%s%s",A+1,B+1);
n=strlen(A+1);
// for(int i=1;i<=n;i++) putchar(A[i]);
// puts("");
// for(int i=1;i<=n;i++) putchar(B[i]);
solve();
return 0;
}
rt,不知道为啥一直T3个点
回复
共 1 条回复,欢迎继续交流。
正在加载回复...