Submission #2008836


Source Code Expand

#include <bits/stdc++.h>

using std::min;
using std::pair;
using std::make_pair;

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);
}

pair<int,int>pt[N];
int check(int n,int movr) {
	int val=0;
	for (int i=1;i<=n;++i) {
		pair<int,int> u=pt[i];
		if (u.first>movr && val<u.second) val=u.second;
	}
	return val;
}

void Solve() {
	int ans=n*n+1000,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,top=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]) {
				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++;
					pt[++top]=make_pair(d1,d2);
				}
				else cnt=n*n+1000;
			}
		}
		int l=0,r=n,bst=check(top,n)+n;
		while (l<=r) {
			int mid=(l+r)>>1,val=check(top,mid)+mid;
			if (bst>val) bst=val,r=mid-1;
			else l=mid+1;
		}
		bst=check(top,l)+l;
		ans=min(ans,cnt+p+bst*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,top=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]) {
				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++;
					pt[++top]=make_pair(d1,d2);
				}
				else cnt=n*n+1000;
			}
		}
		int l=0,r=n,bst=check(top,n)+n;
		while (l<=r) {
			int mid=(l+r)>>1,val=check(top,mid)+mid;
			if (bst>val) bst=val,r=mid-1;
			else l=mid+1;
		}
		bst=check(top,l)+l;
		ans=min(ans,cnt+n-p+bst*2);
	}
	if (ans==n*n+1000) 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 2368 Byte
Status WA
Exec Time 99 ms
Memory 384 KB

Compile Error

./Main.cpp: In function ‘void Init()’:
./Main.cpp:14: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
AC × 4
AC × 52
WA × 2
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 40 ms 256 KB
subtask_1_05.txt AC 47 ms 256 KB
subtask_1_06.txt AC 64 ms 256 KB
subtask_1_07.txt AC 35 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 94 ms 256 KB
subtask_1_12.txt AC 78 ms 384 KB
subtask_1_13.txt AC 93 ms 256 KB
subtask_1_14.txt AC 75 ms 256 KB
subtask_1_15.txt AC 65 ms 256 KB
subtask_1_16.txt AC 59 ms 256 KB
subtask_1_17.txt AC 59 ms 256 KB
subtask_1_18.txt AC 59 ms 256 KB
subtask_1_19.txt AC 65 ms 256 KB
subtask_1_20.txt AC 72 ms 256 KB
subtask_1_21.txt AC 70 ms 256 KB
subtask_1_22.txt AC 69 ms 256 KB
subtask_1_23.txt AC 98 ms 256 KB
subtask_1_24.txt AC 99 ms 256 KB
subtask_1_25.txt AC 98 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 AC 5 ms 256 KB
subtask_1_35.txt AC 16 ms 256 KB
subtask_1_36.txt AC 65 ms 256 KB
subtask_1_37.txt AC 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 61 ms 256 KB
subtask_1_43.txt AC 61 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