Submission #2010044


Source Code Expand

#define _CRT_SECURE_NO_WARNINGS
#pragma comment(linker, "/stack:16777216")
#include <string>
#include <vector>
#include <map>
#include <list>
#include <iterator>
#include <set>
#include <queue>
#include <iostream>
#include <sstream>
#include <stack>
#include <deque>
#include <cmath>
#include <cstdlib>
#include <cstdio>
#include <cctype>
#include <algorithm>
#include <utility>
#include <time.h>
#include <memory.h>
#include<iomanip>
using namespace std;

#define FOR(i,a,b) for(int i = (a); i < (b); i++)
#define RFOR(i,b,a) for(int i = (b) - 1; i >= (a); i--)
#define ITER(it, a) for(typeof(a.begin()) it = a.begin(); it != a.end(); it++)
#define FILL(a, value) memset(a, value, sizeof(a))

#define SZ(a) (int) a.size()
#define ALL(a) a.begin(),a.end()
#define PB push_back
#define MP make_pair

typedef long long LL;
typedef vector<int> VI;
typedef pair<int, int> PII;

const double PI = acos(-1.0);
const LL INF = 1000 * 1000 * 1000 + 7;
const LL LINF = INF * (LL)INF;

const int MAX = 2 * 1000 + 47;

string a, b;
int A[MAX];
int B[MAX];
vector<PII> P;
int L[MAX];
int R[MAX];
int n;

void ADD(int& key, int val)
{
	key += val;
	if (key < 0) key += n;
	if (key >= n) key -= n;
}

int solve(vector<PII>& P, int sh)
{
	sort(ALL(P));
	int ans = INF;
	int mx = 0;
	RFOR(i, SZ(P), 0)
	{
		int val = P[i].first + 2 * mx + abs(P[i].first - sh);
		ans = min(ans, val);
		mx = max(mx, P[i].second);
	}

	ans = min(ans, mx * 2 + sh);
	// cout << "sh=" << sh << endl;
	// FOR(i,0, SZ(P))
	// {
	//     cout << P[i].first << " " << P[i].second << endl;
	// }
	// cout<< "ans=" << ans << endl;
	if (ans == INF) ans = 0;
	return ans;
}

int main()
{
	//freopen("in.txt", "r", stdin);
	//freopen("out.txt", "w", stdout);
	ios::sync_with_stdio(false); cin.tie(0);
	cin >> a >> b;
	n = SZ(a);
	int cntA = 0, cntB = 0;
	FOR(i, 0, n)
	{
		A[i] = a[i] - '0';
		B[i] = b[i] - '0';

		cntA += A[i];
		cntB += B[i];
	}

	if (cntB == 0 && cntA)
	{
		cout << -1 << endl;
		return 0;
	}

	FOR(i, 0, n)
	{
		FOR(d, 0, n)
		{
			int x = 0;
			ADD(x, i - d);
			if (B[x] == 1)
			{
				L[i] = d;
				break;
			}
		}

		FOR(d, 0, n)
		{
			int x = 0;
			ADD(x, i + d);
			if (B[x] == 1)
			{
				R[i] = d;
				break;
			}
		}
	}

	// FOR(i,0,n)
	// {
	//     cout << L[i] << " " << R[i] << endl;
	// }
	int ans = INF;
	FOR(i, 0, n)
	{
		P.clear();
		int cnt = 0;
		FOR(j, 0, n)
		{
			int x = 0;
			ADD(x, j - i);

			cnt += B[x] != A[j];
			if (B[x] == 0 && A[j] == 1)
			{
				P.PB(MP(L[j], R[j]));
			}
		}

		ans = min(ans, solve(P, i) + cnt);
		FOR(j, 0, SZ(P))
		{
			swap(P[j].first, P[j].second);
		}

		ans = min(ans, solve(P, n - i) + cnt);
	}

	cout << ans << endl;
}

Submission Info

Submission Time
Task D - Shift and Flip
User philologist
Language C++14 (GCC 5.4.1)
Score 1000
Code Size 2815 Byte
Status AC
Exec Time 241 ms
Memory 384 KB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 1000 / 1000
Status
AC × 4
AC × 54
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 256 KB
sample_02.txt AC 2 ms 256 KB
sample_03.txt AC 2 ms 256 KB
sample_04.txt AC 2 ms 256 KB
subtask_1_01.txt AC 2 ms 256 KB
subtask_1_02.txt AC 2 ms 256 KB
subtask_1_03.txt AC 2 ms 256 KB
subtask_1_04.txt AC 35 ms 256 KB
subtask_1_05.txt AC 15 ms 256 KB
subtask_1_06.txt AC 2 ms 256 KB
subtask_1_07.txt AC 16 ms 256 KB
subtask_1_08.txt AC 1 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 84 ms 256 KB
subtask_1_12.txt AC 30 ms 256 KB
subtask_1_13.txt AC 87 ms 256 KB
subtask_1_14.txt AC 114 ms 256 KB
subtask_1_15.txt AC 148 ms 256 KB
subtask_1_16.txt AC 190 ms 256 KB
subtask_1_17.txt AC 199 ms 256 KB
subtask_1_18.txt AC 234 ms 256 KB
subtask_1_19.txt AC 241 ms 256 KB
subtask_1_20.txt AC 217 ms 256 KB
subtask_1_21.txt AC 82 ms 256 KB
subtask_1_22.txt AC 82 ms 256 KB
subtask_1_23.txt AC 163 ms 384 KB
subtask_1_24.txt AC 164 ms 384 KB
subtask_1_25.txt AC 164 ms 384 KB
subtask_1_26.txt AC 1 ms 256 KB
subtask_1_27.txt AC 2 ms 256 KB
subtask_1_28.txt AC 3 ms 256 KB
subtask_1_29.txt AC 12 ms 256 KB
subtask_1_30.txt AC 56 ms 256 KB
subtask_1_31.txt AC 1 ms 256 KB
subtask_1_32.txt AC 1 ms 256 KB
subtask_1_33.txt AC 2 ms 256 KB
subtask_1_34.txt AC 4 ms 256 KB
subtask_1_35.txt AC 19 ms 256 KB
subtask_1_36.txt AC 80 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 21 ms 256 KB
subtask_1_41.txt AC 81 ms 256 KB
subtask_1_42.txt AC 75 ms 256 KB
subtask_1_43.txt AC 83 ms 256 KB
subtask_1_44.txt AC 92 ms 256 KB
subtask_1_45.txt AC 83 ms 256 KB
subtask_1_46.txt AC 83 ms 384 KB