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 |
|
|
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 |