Submission #1543096
Source Code Expand
#include <cstdio> #include <cstring> #include <cstdlib> #include <vector> #include <utility> #include <algorithm> #include <cstdlib> #include <set> using namespace std; const int MAXN = 2000 + 10; int N; char A[MAXN], B[MAXN]; int ToMove[MAXN], nToMove; int One[MAXN * 3], nOne; int Left[MAXN], Right[MAXN]; int dist(int from, int to) { from = (from % N + N) % N; to = (to % N + N) % N; return min(abs(from - to), N - abs(from - to)); } void Work() { scanf("%s%s", A, B); if (strcmp(A, B) == 0) { printf("0\n"); return; } N = strlen(A); nOne = 0; for (int i = 0; i < N; i ++) if (B[i] == '1') { One[nOne * 3 + 0] = i - N; One[nOne * 3 + 1] = i; One[nOne * 3 + 2] = i + N; nOne ++; } sort(One, One + nOne * 3); if (nOne == 0) { printf("-1\n"); return; } int ans = 1000000000; for (int start = 0; start < N; start ++) { int ops = 0; nToMove = 0; for (int i = 0; i < N; i ++) if (A[(start + i) % N] != B[i]) { ops ++; if (B[i] == '0') ToMove[nToMove ++] = (start + i) % N; } if (nToMove == 0) { ops += min(start, N - start); ans = min(ans, ops); continue; } for (int k = 0; k < nToMove; k ++) { int i = ToMove[k]; Left[k] = i - (*(upper_bound(One, One + nOne * 3, i) - 1)); Right[k] = (*lower_bound(One, One + nOne * 3, i)) - i; } vector < pair <int, int> > V; multiset <int> Set; V.clear(); Set.clear(); for (int k = 0; k < nToMove; k ++) { V.push_back(make_pair(Left[k], Right[k])); Set.insert(-Right[k]); } sort(V.begin(), V.end()); int ansmv = 1000000000, l, r, curmv;; l = 0; r = -*Set.begin(); curmv = min(l + l + r + dist(-r, start), r + r + l + dist(l, start)); ansmv = min(ansmv, curmv); for (int k = 0; k < nToMove; k ++) { Set.erase(Set.find(-V[k].second)); l = V[k].first; r = Set.empty() ? 0 : (-*Set.begin()); curmv = min(l + l + r + dist(-r, start), r + r + l + dist(l, start)); ansmv = min(ansmv, curmv); } ans = min(ans, ansmv + ops); } printf("%d\n", ans); } int main() { Work(); return 0; }
Submission Info
Submission Time | |
---|---|
Task | D - Shift and Flip |
User | TianXie |
Language | C++14 (GCC 5.4.1) |
Score | 1000 |
Code Size | 2194 Byte |
Status | AC |
Exec Time | 712 ms |
Memory | 384 KB |
Compile Error
./Main.cpp: In function ‘void Work()’: ./Main.cpp:29:21: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result] scanf("%s%s", A, B); ^
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 | 14 ms | 256 KB |
subtask_1_06.txt | AC | 1 ms | 256 KB |
subtask_1_07.txt | AC | 1 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 | 2 ms | 256 KB |
subtask_1_11.txt | AC | 332 ms | 256 KB |
subtask_1_12.txt | AC | 133 ms | 256 KB |
subtask_1_13.txt | AC | 335 ms | 256 KB |
subtask_1_14.txt | AC | 359 ms | 384 KB |
subtask_1_15.txt | AC | 439 ms | 256 KB |
subtask_1_16.txt | AC | 528 ms | 384 KB |
subtask_1_17.txt | AC | 527 ms | 384 KB |
subtask_1_18.txt | AC | 595 ms | 384 KB |
subtask_1_19.txt | AC | 629 ms | 384 KB |
subtask_1_20.txt | AC | 586 ms | 256 KB |
subtask_1_21.txt | AC | 332 ms | 384 KB |
subtask_1_22.txt | AC | 332 ms | 256 KB |
subtask_1_23.txt | AC | 710 ms | 384 KB |
subtask_1_24.txt | AC | 712 ms | 384 KB |
subtask_1_25.txt | AC | 711 ms | 384 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 | 56 ms | 256 KB |
subtask_1_30.txt | AC | 273 ms | 256 KB |
subtask_1_31.txt | AC | 1 ms | 256 KB |
subtask_1_32.txt | AC | 2 ms | 256 KB |
subtask_1_33.txt | AC | 4 ms | 256 KB |
subtask_1_34.txt | AC | 14 ms | 256 KB |
subtask_1_35.txt | AC | 69 ms | 256 KB |
subtask_1_36.txt | AC | 319 ms | 256 KB |
subtask_1_37.txt | AC | 2 ms | 256 KB |
subtask_1_38.txt | AC | 3 ms | 256 KB |
subtask_1_39.txt | AC | 17 ms | 256 KB |
subtask_1_40.txt | AC | 74 ms | 256 KB |
subtask_1_41.txt | AC | 296 ms | 256 KB |
subtask_1_42.txt | AC | 288 ms | 256 KB |
subtask_1_43.txt | AC | 326 ms | 256 KB |
subtask_1_44.txt | AC | 333 ms | 256 KB |
subtask_1_45.txt | AC | 327 ms | 256 KB |
subtask_1_46.txt | AC | 336 ms | 256 KB |