Submission #2008503
Source Code Expand
#include <bits/stdc++.h> using std::min; const int N=2010; int n,pre[N],lst[N],l[N],r[N]; bool can[N<<1]; char A[N<<1],B[N]; void Init() { scanf("%s%s",A,B); n=strlen(A); } void Solve() { int ans=n*n+1,fir=n*n+1000,end=n*n+1000; for (int i=0;i<n;++i) if (B[i]=='1') { fir=i; break; } for (int i=n-1;i>=0;--i) if (B[i]=='1') { end=i; break; } for (int i=0;i<n;++i) if (B[i]=='1') pre[i]=i;else pre[i]=i?pre[i-1]:end-n; for (int i=n-1;i>=0;--i) if (B[i]=='1') lst[i]=i;else lst[i]=i<n-1?lst[i+1]:fir+n; for (int i=0;i<n;++i) A[i+n]=A[i],l[i]=n+1,r[i]=n+1; for (int p=0;p<=n;++p) { int cnt=0,movl=0,movr=0; for (int j=n-1;j>=0;--j) { if (B[j]=='1') can[(j+p)%n]=1; else l[(j+p)%n]=min(l[(j+p)%n],j-pre[j]),r[(j+p)%n]=min(r[(j+p)%n],lst[j]-j); if (A[j+p]!=B[j] && cnt!=-1) { if (can[(j+p)%n]) cnt++; else if ((l[(j+p)%n]<=n && l[(j+p)%n]>=0) || (r[(j+p)%n]<=n && r[(j+p)%n]>=0)) { int d1=r[(j+p)%n],d2=l[(j+p)%n]; cnt++; if (d1<=movr || d2<=movl) continue; else if (d1<d2) movr=d1;else movl=d2; } else cnt=n*n+1; } } ans=min(ans,cnt+p+movr*2+movl*2); } for (int i=0;i<n;++i) l[i]=n+1,r[i]=n+1; for (int i=0;i<n*2;++i) can[i]=0; for (int p=n;p>=0;--p) { int cnt=0,movr=0,movl=0; for (int j=0;j<n;++j) { if (B[j]=='1') can[(j+p)%n]=1; else l[(j+p)%n]=min(l[(j+p)%n],j-pre[j]),r[(j+p)%n]=min(r[(j+p)%n],lst[j]-j); if (A[j+p]!=B[j] && cnt!=-1) { if (can[(j+p)%n]) cnt++; else if ((l[(j+p)%n]<=n && l[(j+p)%n]>=0) || (r[(j+p)%n]<=n && r[(j+p)%n]>=0)) { int d1=r[(j+p)%n],d2=l[(j+p)%n]; cnt++; if (d1<=movr || d2<=movl) continue; else if (d1<d2) movr=d1;else movl=d2; } else cnt=n*n+1; } } ans=min(ans,cnt+n-p+movr*2+movl*2); } if (ans==n*n+1) printf("-1\n"); else printf("%d\n",ans); } int main() { Init(); Solve(); return 0; }
Submission Info
Submission Time | |
---|---|
Task | D - Shift and Flip |
User | Mcallor |
Language | C++14 (GCC 5.4.1) |
Score | 0 |
Code Size | 1927 Byte |
Status | WA |
Exec Time | 97 ms |
Memory | 256 KB |
Compile Error
./Main.cpp: In function ‘void Init()’: ./Main.cpp:12:19: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result] scanf("%s%s",A,B); ^
Judge Result
Set Name | Sample | All | ||||||
---|---|---|---|---|---|---|---|---|
Score / Max Score | 0 / 0 | 0 / 1000 | ||||||
Status |
|
|
Set Name | Test Cases |
---|---|
Sample | sample_01.txt, sample_02.txt, sample_03.txt, sample_04.txt |
All | sample_01.txt, sample_02.txt, sample_03.txt, sample_04.txt, sample_01.txt, sample_02.txt, sample_03.txt, sample_04.txt, subtask_1_01.txt, subtask_1_02.txt, subtask_1_03.txt, subtask_1_04.txt, subtask_1_05.txt, subtask_1_06.txt, subtask_1_07.txt, subtask_1_08.txt, subtask_1_09.txt, subtask_1_10.txt, subtask_1_11.txt, subtask_1_12.txt, subtask_1_13.txt, subtask_1_14.txt, subtask_1_15.txt, subtask_1_16.txt, subtask_1_17.txt, subtask_1_18.txt, subtask_1_19.txt, subtask_1_20.txt, subtask_1_21.txt, subtask_1_22.txt, subtask_1_23.txt, subtask_1_24.txt, subtask_1_25.txt, subtask_1_26.txt, subtask_1_27.txt, subtask_1_28.txt, subtask_1_29.txt, subtask_1_30.txt, subtask_1_31.txt, subtask_1_32.txt, subtask_1_33.txt, subtask_1_34.txt, subtask_1_35.txt, subtask_1_36.txt, subtask_1_37.txt, subtask_1_38.txt, subtask_1_39.txt, subtask_1_40.txt, subtask_1_41.txt, subtask_1_42.txt, subtask_1_43.txt, subtask_1_44.txt, subtask_1_45.txt, subtask_1_46.txt |
Case Name | Status | Exec Time | Memory |
---|---|---|---|
sample_01.txt | AC | 1 ms | 256 KB |
sample_02.txt | AC | 1 ms | 256 KB |
sample_03.txt | AC | 1 ms | 256 KB |
sample_04.txt | AC | 1 ms | 256 KB |
subtask_1_01.txt | AC | 1 ms | 256 KB |
subtask_1_02.txt | AC | 1 ms | 256 KB |
subtask_1_03.txt | AC | 1 ms | 256 KB |
subtask_1_04.txt | AC | 39 ms | 256 KB |
subtask_1_05.txt | AC | 47 ms | 256 KB |
subtask_1_06.txt | AC | 65 ms | 256 KB |
subtask_1_07.txt | AC | 31 ms | 256 KB |
subtask_1_08.txt | AC | 39 ms | 256 KB |
subtask_1_09.txt | AC | 1 ms | 256 KB |
subtask_1_10.txt | AC | 1 ms | 256 KB |
subtask_1_11.txt | AC | 97 ms | 256 KB |
subtask_1_12.txt | AC | 81 ms | 256 KB |
subtask_1_13.txt | AC | 96 ms | 256 KB |
subtask_1_14.txt | AC | 56 ms | 256 KB |
subtask_1_15.txt | AC | 55 ms | 256 KB |
subtask_1_16.txt | AC | 55 ms | 256 KB |
subtask_1_17.txt | AC | 55 ms | 256 KB |
subtask_1_18.txt | AC | 58 ms | 256 KB |
subtask_1_19.txt | AC | 65 ms | 256 KB |
subtask_1_20.txt | AC | 71 ms | 256 KB |
subtask_1_21.txt | AC | 50 ms | 256 KB |
subtask_1_22.txt | AC | 50 ms | 256 KB |
subtask_1_23.txt | AC | 60 ms | 256 KB |
subtask_1_24.txt | AC | 60 ms | 256 KB |
subtask_1_25.txt | AC | 60 ms | 256 KB |
subtask_1_26.txt | AC | 1 ms | 256 KB |
subtask_1_27.txt | AC | 2 ms | 256 KB |
subtask_1_28.txt | AC | 5 ms | 256 KB |
subtask_1_29.txt | AC | 17 ms | 256 KB |
subtask_1_30.txt | AC | 62 ms | 256 KB |
subtask_1_31.txt | AC | 1 ms | 256 KB |
subtask_1_32.txt | WA | 1 ms | 256 KB |
subtask_1_33.txt | AC | 2 ms | 256 KB |
subtask_1_34.txt | WA | 5 ms | 256 KB |
subtask_1_35.txt | AC | 16 ms | 256 KB |
subtask_1_36.txt | WA | 64 ms | 256 KB |
subtask_1_37.txt | WA | 1 ms | 256 KB |
subtask_1_38.txt | AC | 2 ms | 256 KB |
subtask_1_39.txt | AC | 5 ms | 256 KB |
subtask_1_40.txt | AC | 17 ms | 256 KB |
subtask_1_41.txt | WA | 61 ms | 256 KB |
subtask_1_42.txt | AC | 60 ms | 256 KB |
subtask_1_43.txt | AC | 60 ms | 256 KB |
subtask_1_44.txt | AC | 66 ms | 256 KB |
subtask_1_45.txt | AC | 65 ms | 256 KB |
subtask_1_46.txt | AC | 64 ms | 256 KB |