Submission #3425313


Source Code Expand

#include "iostream"
#include "climits"
#include "list"
#include "queue"
#include "vector"
#include "string"
#include "map"
#include "algorithm"
#include "functional"
#include "set"
#include "numeric"

using namespace std;

const long long int MOD = 1000000007;

int N, M, K, H, W, L, R;

int main() {
	ios::sync_with_stdio(false);
	cin.tie(0);

	string s, t;
	cin >> s >> t;
	bool a = false, b = false;
	for (auto i : s)if (i == '1')a = true;
	for (auto i : t)if (i == '1')b = true;
	if (!a && !b) {
		cout << 0 << endl;
		return 0;
	}
	if (!b) {
		cout << -1 << endl;
		return 0;
	}
	N = s.size();
	vector<int>l(N, MOD);
	vector<int>r(N, MOD);
	L = 0;
	R = -1;
	for (int i = 0; i < N; i++) {
		if (t[i] == '1') {
			if (R == -1)R = i;
			for (int j = L; j <= i; j++) {
				r[j] = i - j;
			}
			L = i + 1;
		}
	}
	for (int i = 0; i < N; i++) {
		if (r[i] == MOD)r[i] = R + N - i;
	}
	R = N - 1;
	L = -1;
	for (int i = N - 1; i >= 0; i--) {
		if (t[i] == '1') {
			if (L == -1)L = i;
			for (int j = R; j >= i; j--) {
				l[j] = j - i;
			}
			R = i - 1;
		}
	}
	for (int i = 0; i < N; i++) {
		if (l[i] == MOD)l[i] = i + N - L;
	}
	int ans = MOD;
	vector<vector<int>>lbox(N);
	for (int i = 0; i < N; i++)lbox[l[i]].push_back(r[i]);
	for (int i = 0; i < N; i++) {
		set<int>st;
		vector<vector<int>>llbox(N);
		int cnt = 0;
		for (int j = 0; j < N; j++) {
			if (t[j] != s[(i + j) % N]) {
				cnt++;
				llbox[l[(i+j)%N]].push_back((i+j)%N);
			}
		}
		for (int j = N - 1; j > 0; j--) {
			//cout << i << " " << j << " " << st.size() << endl;
			int box = j;
			if (st.empty()) {
				box += min(N - abs(i - j), abs(i - j));
				ans = min(ans, box+cnt);
				for (auto k : llbox[j])st.insert(-r[k]);
				//cout <<"a "<< i << " " << j << " " << ans << endl;
				continue;
			}
			auto it = st.upper_bound(j - N);
			if (it == st.end()) {
				box += min(N - abs(i - j), abs(i - j));
				ans = min(ans, box+cnt);
				for (auto k : llbox[j])st.insert(-r[k]);
				//cout <<"b "<< i << " " << j << " " << ans << endl;
			}
			box -= *it;
			//cout << i << " " << j << " " << box << endl;
			ans = min(ans, cnt+ box - *it + min(N - abs(i - j), abs(i - j)));
			ans = min(ans, cnt+ box + j + min(N - abs(i - (N + *it)), abs(i - (N + *it))));
			//cout <<"c "<< i << " " << j << " " << ans << endl;
			for (auto k : llbox[j])st.insert(-r[k]);
		}
		if (st.empty()) {
			ans = min(ans, cnt + min(N - i, i));
		//	cout << i << " 0 " << ans << endl;
			continue;
		}
		auto it = st.upper_bound(-N);
		ans = min(ans, cnt - *it + min(N - abs(i - (N + *it)), abs(i - (N + *it))));
		//cout << i << " 0 " << ans << endl;
	}
	cout << ans << endl;
	return 0;
}

Submission Info

Submission Time
Task D - Shift and Flip
User olphe
Language C++14 (GCC 5.4.1)
Score 1000
Code Size 2754 Byte
Status AC
Exec Time 628 ms
Memory 640 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 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 1 ms 256 KB
subtask_1_05.txt AC 53 ms 384 KB
subtask_1_06.txt AC 1 ms 256 KB
subtask_1_07.txt AC 34 ms 384 KB
subtask_1_08.txt AC 1 ms 256 KB
subtask_1_09.txt AC 1 ms 256 KB
subtask_1_10.txt AC 2 ms 256 KB
subtask_1_11.txt AC 99 ms 384 KB
subtask_1_12.txt AC 91 ms 384 KB
subtask_1_13.txt AC 103 ms 384 KB
subtask_1_14.txt AC 415 ms 640 KB
subtask_1_15.txt AC 404 ms 512 KB
subtask_1_16.txt AC 375 ms 512 KB
subtask_1_17.txt AC 362 ms 512 KB
subtask_1_18.txt AC 292 ms 384 KB
subtask_1_19.txt AC 247 ms 384 KB
subtask_1_20.txt AC 200 ms 384 KB
subtask_1_21.txt AC 355 ms 512 KB
subtask_1_22.txt AC 354 ms 512 KB
subtask_1_23.txt AC 627 ms 640 KB
subtask_1_24.txt AC 628 ms 640 KB
subtask_1_25.txt AC 625 ms 640 KB
subtask_1_26.txt AC 2 ms 256 KB
subtask_1_27.txt AC 3 ms 256 KB
subtask_1_28.txt AC 11 ms 256 KB
subtask_1_29.txt AC 44 ms 384 KB
subtask_1_30.txt AC 189 ms 384 KB
subtask_1_31.txt AC 1 ms 256 KB
subtask_1_32.txt AC 2 ms 256 KB
subtask_1_33.txt AC 3 ms 256 KB
subtask_1_34.txt AC 13 ms 256 KB
subtask_1_35.txt AC 52 ms 384 KB
subtask_1_36.txt AC 206 ms 384 KB
subtask_1_37.txt AC 2 ms 256 KB
subtask_1_38.txt AC 3 ms 256 KB
subtask_1_39.txt AC 14 ms 256 KB
subtask_1_40.txt AC 49 ms 384 KB
subtask_1_41.txt AC 205 ms 384 KB
subtask_1_42.txt AC 203 ms 384 KB
subtask_1_43.txt AC 214 ms 384 KB
subtask_1_44.txt AC 211 ms 512 KB
subtask_1_45.txt AC 209 ms 384 KB
subtask_1_46.txt AC 215 ms 384 KB