Submission #5565240


Source Code Expand

#include <algorithm>
#include <iostream>
#include <vector>
#include <bitset>
#include <set>
using namespace std;

typedef long long ll;
typedef pair <ll, ll> pii;

const ll MAX_N = 4e3 + 6, inf = 1e9 + 7;
string A, B;
bitset <MAX_N> a, b, c, d, Lf[MAX_N], Rt[MAX_N];
vector <pii> seg;
ll n, ans = inf;
pii Arr[MAX_N];
ll mx[MAX_N];

bool cmp (pii a, pii b) {
	return a.second < b.second;
}

int main() {
    ios::sync_with_stdio(false), cin.tie(0);
    cin >> A >> B;
    n = A.size();

    for (ll i = 0; i < n; i++) {
        a[i] = (A[n - i - 1] == '1');
        b[i] = (B[n - i - 1] == '1');
        d[i] = true;
    }
    ll tmp = b.count() + a.count();
    if (b.count() == 0) {
    	if (a.count() == 0)
    		cout << "0\n";
    	else
    		cout << "-1\n";

    	return 0;
    }

    for (ll i = 0; i < n; i++) {
    	ll ind = -1, cnt = 0;
    	for (ll j = i; ~j; j--, cnt++)
    		if (B[j] == '1') {
    			ind = j;
    			break;
    		}

    	if (ind == -1)
    		for (ll j = n - 1; ~j; j--, cnt++)
    			if (B[j] == '1') {
    				ind = j;
    				break;
    			}

    	Arr[i].first = cnt;
    	cnt = 0;
    	ind = -1;
    	for (ll j = i; j < n; j++, cnt++)
    		if (B[j] == '1') {
    			ind = j;
    			break;
    		}

    	if (ind == -1)
    		for (ll j = 0; j < n - 1; j++, cnt++)
    			if (B[j] == '1') {
    				ind = j;
    				break;
    			}

    	Arr[i].second = cnt;
  		if (A[i] == '1')
  			seg.push_back({Arr[i].second, Arr[i].first});
    }

    sort(seg.begin(), seg.end());
    for (ll i = seg.size() - 1; ~i; i--)
    	mx[i] = max(mx[i + 1], seg[i].second);

    for (ll len = 0; len < n; len++) {
    	ll res = inf;
    	for (ll i = len; i < n; i++) {
    		ll ind = upper_bound(seg.begin(), seg.end(), pii(i, inf)) - seg.begin();
    		res = min(res, i + (i - len) + (mx[ind] << 1));
    	}

        c = a;
        c = (c >> len) | ((c << (n - len)) & d);

        res += tmp - ((b & c).count() << 1);
        ans = min(ans, res);
    }

    seg.clear();
    for (int i = 0; i < n; i++)
    	if (A[i] == '1')
    		seg.push_back(Arr[i]);

	sort(seg.begin(), seg.end());
    for (ll i = seg.size() - 1; ~i; i--)
    	mx[i] = max(mx[i + 1], seg[i].second);

    for (ll len = 0; len < n; len++) {
    	ll res = inf;
    	for (ll i = len; i < n; i++) {
    		ll ind = upper_bound(seg.begin(), seg.end(), pii(i, inf)) - seg.begin();
    		res = min(res, i + (i - len) + (mx[ind] << 1));
    	}

        c = a;
        c = ((c << len) & d) | ((c << len) >> n);

        res += tmp - ((b & c).count() << 1);
        ans = min(ans, res);
    }

	cout << ans << "\n";
    return 0;
}

Submission Info

Submission Time
Task D - Shift and Flip
User vjudge3
Language C++14 (Clang 3.8.0)
Score 1000
Code Size 2607 Byte
Status AC
Exec Time 225 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 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 10 ms 256 KB
subtask_1_06.txt AC 1 ms 256 KB
subtask_1_07.txt AC 85 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 77 ms 384 KB
subtask_1_12.txt AC 77 ms 384 KB
subtask_1_13.txt AC 77 ms 384 KB
subtask_1_14.txt AC 164 ms 384 KB
subtask_1_15.txt AC 128 ms 384 KB
subtask_1_16.txt AC 94 ms 384 KB
subtask_1_17.txt AC 91 ms 384 KB
subtask_1_18.txt AC 80 ms 384 KB
subtask_1_19.txt AC 86 ms 384 KB
subtask_1_20.txt AC 78 ms 384 KB
subtask_1_21.txt AC 133 ms 384 KB
subtask_1_22.txt AC 134 ms 384 KB
subtask_1_23.txt AC 225 ms 384 KB
subtask_1_24.txt AC 225 ms 384 KB
subtask_1_25.txt AC 224 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 5 ms 256 KB
subtask_1_29.txt AC 19 ms 256 KB
subtask_1_30.txt AC 79 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 2 ms 256 KB
subtask_1_34.txt AC 6 ms 256 KB
subtask_1_35.txt AC 24 ms 256 KB
subtask_1_36.txt AC 80 ms 384 KB
subtask_1_37.txt AC 2 ms 256 KB
subtask_1_38.txt AC 2 ms 256 KB
subtask_1_39.txt AC 6 ms 256 KB
subtask_1_40.txt AC 20 ms 256 KB
subtask_1_41.txt AC 80 ms 384 KB
subtask_1_42.txt AC 80 ms 384 KB
subtask_1_43.txt AC 80 ms 384 KB
subtask_1_44.txt AC 80 ms 384 KB
subtask_1_45.txt AC 80 ms 384 KB
subtask_1_46.txt AC 80 ms 384 KB