Submission #5676570


Source Code Expand

#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define ull unsigned long long
#define ld long double
#define mod 1000000007
#define eps 1e-13
#define PI 3.141592653589793238L
#define INF 1000000011
#define INFLL 1000000000000000011LL
#define vi vector<int>
#define vll vector<long long>
#define pii pair<int, int>
#define pll pair<long long, long long>
#define pil pair<int, long long>
#define pli pair<long long, int>
#define mp make_pair
#define F first
#define S second
#define pb push_back
#define fo(i,a,n) for(i = (a); i < (n); i++)
#define gtl(x) getline(cin, (x))
#define flsh fflush(stdout)
#define sws ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0)
#define gcd __gcd
#define all(a) (a).begin(), (a).end()
#define sz(a) (int)((a).size())
#define io_file freopen("D:/Coding Problems/Contest/input_file.in", "r", stdin); freopen("D:/Coding Problems/Contest/output_file.out", "w", stdout)

ll modx(ll Base, ll exponent)
{
	ll ans = 1;
	if(Base == 1)
		return Base;
	while(exponent)
	{
		if(exponent & 1)
			ans = (ans * Base)%mod;
		Base = (Base * Base)%mod;
		exponent = exponent >> 1;
	}
	return ans;
}

ll inmodx(ll num)
{
	return (modx(num, mod-2LL));
}

bool cmp(pair < vi, int > a, pair < vi, int > b)//true for a before b
{
	if(a.F.empty())
		return 1;
	if(b.F.empty())
		return 0;
	int i;
	fo(i,0,min(sz(a.F),sz(b.F)))
	{
		if(a.F[i] < b.F[i])
			return 1;
		else if(a.F[i] > b.F[i])
			return 0;
	}
	return (sz(a.F) <= sz(b.F));
}

const int N = (2e3) + 9;
const int M = (N<<2) + 9;
const int LOGN = ((int)log2(N)) + 3;
const int LOGM = ((int)log2(M)) + 3;
const int BUCK = 900;
const int SQRT = BUCK+9;

const int MAX = 2000;
string a, b;
bitset < MAX > bt[N], prefix[N], suffix[N], dp[N][N], ch;

bool check(int ind, int n)
{
	int i;
	fo(i,0,n)
		if(a[(i+ind)%n] != b[i])
			return 0;
	return 1;
}

void pre(int ind, int n)
{
	int i, j;
	fo(i,0,n)
	{
		j = (i+ind)%n;
		if(b[j] == '1')
			bt[ind].set(i);
	}
	return;
}

void pre(int n)
{
	int i, j;
	bt[n] = bt[0];
	prefix[0] = bt[0];
	fo(i,1,n)
		prefix[i] = prefix[i-1]|bt[i];
	suffix[n] = bt[n];
	for(i = n-1; i > 0; i--)
		suffix[i] = suffix[i+1]|bt[i];
	fo(i,0,n+1)
		fo(j,0,n+1)
			dp[i][j] = prefix[i]|suffix[j];
	return;
}

int func(int ind, int n)
{
	int i, j, ans = INF, val, cnt = 0;
	ch.reset();
	fo(i,0,n)
	{
		j = (i+ind)%n;
		if(a[j] != b[i])
			cnt++;
		if(a[j] == '1' && b[i] == '0')
			ch.set(i);
	}
	j = 1;
	fo(i,0,n)
	{
		if((ch&prefix[i]) == ch)
			val = i + min(abs(ind-i),n-(ind-i));
		else
		{
			while(j < n)
			{
				if((ch&(dp[i][j+1])) != ch)
					break;
				j++;
			}
			val = 2*i + (n-j) + min(abs(ind-j),n-abs(ind-j));
		}
		ans = min(ans, val);
	}
	j = n-1;
	for(i = n; i > 0; i--)
	{
		if((ch&suffix[i]) == ch)
			val = (n-i) + min(abs(ind-i),n-abs(ind-i));
		else
		{
			while(j > 1)
			{
				if((ch&(dp[j-1][i])) != ch)
					break;
				j--;
			}
			val = 2*(n-i) + j + min(abs(ind-j),n-abs(ind-j));
		}
		ans = min(ans, val);
	}
	ans += cnt;
	return ans;
}

void solve()
{
	int n, i, ans = INF;
	bool has1 = 0;
	cin >> a;
	cin >> b;
	n = a.length();
	for(auto x : b)
		has1 |= (x == '1');
	if(!has1)
	{
		fo(i,0,n)
			if(check(i,n))
				ans = min(ans, min(i,n-i));
		if(ans == INF)
			ans = -1;
		cout << ans << '\n';
		return;
	}
	if(n == 1)
	{
		if(a == b)
			cout << 0 << '\n';
		else
			cout << 1 << '\n';
		return;
	}
	fo(i,0,n)
		pre(i,n);
	pre(n);
	fo(i,0,n)
		ans = min(ans, func(i,n));
	cout << ans << '\n';
	return;
}

int main()
{
	sws;
	clock_t clk;
	clk = clock();
	// io_file;
	// srand (time(NULL));

	//Code here
	int t = 1, cs;
	cout << fixed << setprecision(15);
	// cin >> t;
	fo(cs,1,t+1)
	{
		// cout << "Case #" << cs << ": ";
		solve();
	}
	// Code ends here

	clk = clock() - clk;
	cerr << fixed << setprecision(6) << "Time: " << ((double)clk)/CLOCKS_PER_SEC << "\n";
	return 0;
}

Submission Info

Submission Time
Task D - Shift and Flip
User vjudge3
Language C++14 (GCC 5.4.1)
Score 0
Code Size 3837 Byte
Status TLE
Exec Time 2056 ms
Memory 1008768 KB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 0 / 1000
Status
AC × 4
AC × 26
TLE × 1
MLE × 27
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 2 ms 2304 KB
sample_02.txt AC 1 ms 256 KB
sample_03.txt AC 2 ms 4352 KB
sample_04.txt AC 2 ms 4352 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 17 ms 256 KB
subtask_1_05.txt MLE 1110 ms 1008768 KB
subtask_1_06.txt AC 1 ms 256 KB
subtask_1_07.txt MLE 1115 ms 1008768 KB
subtask_1_08.txt AC 9 ms 256 KB
subtask_1_09.txt AC 2 ms 6400 KB
subtask_1_10.txt AC 15 ms 51584 KB
subtask_1_11.txt MLE 1749 ms 1008768 KB
subtask_1_12.txt MLE 1721 ms 1008768 KB
subtask_1_13.txt MLE 1749 ms 1008768 KB
subtask_1_14.txt TLE 2056 ms 1008768 KB
subtask_1_15.txt MLE 1948 ms 1008768 KB
subtask_1_16.txt MLE 1837 ms 1008768 KB
subtask_1_17.txt MLE 1866 ms 1008768 KB
subtask_1_18.txt MLE 1782 ms 1008768 KB
subtask_1_19.txt MLE 1763 ms 1008768 KB
subtask_1_20.txt MLE 1733 ms 1008768 KB
subtask_1_21.txt MLE 1944 ms 1008768 KB
subtask_1_22.txt MLE 1951 ms 1008768 KB
subtask_1_23.txt MLE 1981 ms 1008768 KB
subtask_1_24.txt MLE 1993 ms 1008768 KB
subtask_1_25.txt MLE 1993 ms 1008768 KB
subtask_1_26.txt AC 15 ms 51584 KB
subtask_1_27.txt AC 36 ms 100864 KB
subtask_1_28.txt AC 147 ms 252800 KB
subtask_1_29.txt MLE 492 ms 503424 KB
subtask_1_30.txt MLE 1835 ms 1008768 KB
subtask_1_31.txt AC 2 ms 6400 KB
subtask_1_32.txt AC 15 ms 51584 KB
subtask_1_33.txt AC 36 ms 102912 KB
subtask_1_34.txt AC 147 ms 252800 KB
subtask_1_35.txt MLE 493 ms 505472 KB
subtask_1_36.txt MLE 1797 ms 1008768 KB
subtask_1_37.txt AC 15 ms 51584 KB
subtask_1_38.txt AC 36 ms 102912 KB
subtask_1_39.txt AC 147 ms 252800 KB
subtask_1_40.txt MLE 491 ms 505472 KB
subtask_1_41.txt MLE 1822 ms 1008768 KB
subtask_1_42.txt MLE 1824 ms 1008768 KB
subtask_1_43.txt MLE 1830 ms 1008768 KB
subtask_1_44.txt MLE 1815 ms 1008768 KB
subtask_1_45.txt MLE 1826 ms 1008768 KB
subtask_1_46.txt MLE 1810 ms 1008768 KB