QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#444488 | #8523. Puzzle II | ucup-team3564# | RE | 66ms | 10236kb | C++20 | 4.0kb | 2024-06-15 19:34:40 | 2024-06-15 19:34:43 |
Judging History
answer
// MagicDark
#include <bits/stdc++.h>
#define debug cerr << "\033[32m[" << __LINE__ << "]\033[0m "
#define SZ(x) ((int) x.size() - 1)
#define all(x) x.begin(), x.end()
#define ms(x, y) memset(x, y, sizeof x)
#define F(i, x, y) for (int i = (x); i <= (y); i++)
#define DF(i, x, y) for (int i = (x); i >= (y); i--)
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
template <typename T> T& chkmax(T& x, T y) {return x = max(x, y);}
template <typename T> T& chkmin(T& x, T y) {return x = min(x, y);}
template <typename T> T& read(T &x) {
x = 0; int f = 1; char c = getchar();
for (; !isdigit(c); c = getchar()) if (c == '-') f = - f;
for (; isdigit(c); c = getchar()) x = (x << 1) + (x << 3) + (c ^ 48);
return x *= f;
}
mt19937 mrand(20071211);//chrono::steady_clock::now().time_since_epoch().count());
// inline int rnd(int l, int r) {return mrand() % (r - l + 1) + l;}
const int N = 3e5 + 10;
int n, k, a[N], b[N];
int ls[N], rs[N], s[N][2], sz[N], rt1, rt2;
bool val[N];
unsigned key[N];
void pushup(int num) {
sz[num] = sz[ls[num]] + sz[rs[num]] + 1;
F(i, 0, 1) s[num][i] = s[ls[num]][i] + s[rs[num]][i] + (val[num] == i);
}
int merge(int num1, int num2) {
if (!num1 || !num2) return num1 ^ num2;
if (key[num1] < key[num2]) return rs[num1] = merge(rs[num1], num2), pushup(num1), num1;
return ls[num2] = merge(num1, ls[num2]), pushup(num2), num2;
}
pair <int, int> split(int num, int k) {
if (!num) return {0, 0};
if (k >= sz[ls[num]] + 1) {
auto [a, b] = split(rs[num], k - sz[ls[num]] - 1);
rs[num] = a;
pushup(num);
return make_pair(num, b);
} else {
auto [a, b] = split(ls[num], k);
ls[num] = b;
pushup(num);
return make_pair(a, num);
}
}
// int find1(int x) {
// if (sum[ls[x]]) return find1(ls[x]);
// if (val[x]) return sz[ls[x]] + 1;
// return sz[ls[x]] + 1 + find1(rs[x]);
// }
// int find0(int x) {
// if (sum[ls[x]] != sz[ls[x]]) return find0(ls[x]);
// if (!val[x]) return sz[ls[x]] + 1;
// return sz[ls[x]] + 1 + find0(rs[x]);
// }
int find(int x, bool y) {
// debug << x << endl;
if (s[ls[x]][y]) return find(ls[x], y);
if (val[x] == y) return sz[ls[x]] + 1;
return sz[ls[x]] + 1 + find(rs[x], y);
}
signed main() {
read(n), read(k);
F(i, 1, 2 * n) key[i] = mrand();
F(i, 1, n) {
char ch;
do {
ch = getchar();
} while (ch != 'B' && ch != 'C');
a[i] = ch == 'C';
s[i][val[i] = a[i]] = 1;
sz[i] = 1;
rt1 = merge(rt1, i);
}
F(i, 1, n) {
char ch;
do {
ch = getchar();
} while (ch != 'B' && ch != 'C');
b[i] = ch == 'C';
s[i + n][val[i + n] = b[i]] = 1;
sz[i + n] = 1;
rt2 = merge(rt2, i + n);
}
bool w = s[rt1][1] > s[rt2][1];
vector <pair <int, int>> ans;
int s1 = 0, s2 = 0;
// debug << w << endl;
while (s[rt1][!w]) {
// debug << s[rt1][!w] << " " << s[rt2][w] << endl;
int pos1 = find(rt1, !w), pos2 = find(rt2, w);
// debug << "% " << pos1 << " " << pos2 << endl;
pos2 = (pos2 - k - 1 + n) % n + 1;
if (pos1 > 1) {
s1 += pos1 - 1;
auto [a, b] = split(rt1, pos1 - 1);
rt1 = merge(b, a);
}
if (pos2 > 1) {
s2 += pos2 - 1;
auto [a, b] = split(rt2, pos2 - 1);
rt2 = merge(b, a);
}
// debug << "OK\n";
{
auto [a, b] = split(rt1, 1);
auto [c, d] = split(b, k - 1);
// debug << val[a] << endl;
// assert(val[a] != w);
s[a][val[a]]--;
s[a][val[a] ^= true]++;
rt1 = merge(c, merge(a, d));
}
// debug << "OK\n";
{
auto [a, b] = split(rt2, k);
auto [c, d] = split(b, 1);
// debug << val[c] << endl;
s[c][val[c]]--;
s[c][val[c] ^= true]++;
rt2 = merge(c, merge(a, d));
}
ans.emplace_back(s1 + 1, s2 + 1);
ans.emplace_back(s1 + 1, s2 + 2);
// int a1, b1, c1;
// int a2, b2, c2;
// {
// if (pos1 + k <= n) {
// auto [a, b] = split(rt1, pos1 - 1);
// auto [b, c] = split(b, k);
// }
// }
}
cout << ans.size() << '\n';
for (auto [a, b]: ans) cout << (a - 1) % n + 1 << ' ' << (b - 1) % n + 1 << '\n';
return 0;
}
/* why?
*/
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 1ms
memory: 5668kb
input:
6 3 BCCBCC BBCBBC
output:
4 1 6 1 1 4 4 4 5
result:
ok moves = 4
Test #2:
score: 0
Accepted
time: 1ms
memory: 5632kb
input:
2 1 BC BC
output:
2 2 2 2 1
result:
ok moves = 2
Test #3:
score: 0
Accepted
time: 0ms
memory: 7620kb
input:
2 1 BB CC
output:
0
result:
ok moves = 0
Test #4:
score: 0
Accepted
time: 1ms
memory: 5632kb
input:
2 1 CC BB
output:
0
result:
ok moves = 0
Test #5:
score: 0
Accepted
time: 1ms
memory: 5676kb
input:
3 1 CCC BBB
output:
0
result:
ok moves = 0
Test #6:
score: 0
Accepted
time: 1ms
memory: 7904kb
input:
3 1 CBC BCB
output:
2 2 1 2 2
result:
ok moves = 2
Test #7:
score: 0
Accepted
time: 1ms
memory: 5676kb
input:
3 2 BBB CCC
output:
0
result:
ok moves = 0
Test #8:
score: 0
Accepted
time: 1ms
memory: 5560kb
input:
3 2 BCB BCC
output:
2 2 2 2 3
result:
ok moves = 2
Test #9:
score: 0
Accepted
time: 1ms
memory: 5608kb
input:
4 2 CCCB BBCB
output:
2 4 1 4 2
result:
ok moves = 2
Test #10:
score: 0
Accepted
time: 1ms
memory: 5900kb
input:
9 6 CCCBCCCBB BBBCBBBCC
output:
6 4 7 4 8 7 3 7 4 7 4 7 5
result:
ok moves = 6
Test #11:
score: 0
Accepted
time: 1ms
memory: 7656kb
input:
21 3 CCCCBBCBCCCCCCCBCCCCC BBCCBCBBBBBBBBBCBBBBB
output:
8 5 21 5 1 5 1 5 2 8 3 8 4 16 13 16 14
result:
ok moves = 8
Test #12:
score: 0
Accepted
time: 1ms
memory: 5696kb
input:
49 41 CBCCBCCBCCBCCBCCCBBCCBCBBCCCBBCCBCBCBCBCCCCBCBCCB BCCCCBCBBBBCBCBBBBBCBBBBCCCCBCBBCBBCBBBBCBCBCBBBC
output:
38 2 10 2 11 4 21 4 22 6 30 6 31 8 39 8 40 10 48 10 49 13 9 13 10 13 18 13 19 15 28 15 29 16 40 16 41 16 49 16 1 19 9 19 10 19 18 19 19 21 44 21 45 22 13 22 14 23 22 23 23 24 47 24 48 29 24 29 25 31 2 31 3 35 28 35 29
result:
ok moves = 38
Test #13:
score: 0
Accepted
time: 0ms
memory: 5904kb
input:
114 8 BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
output:
0
result:
ok moves = 0
Test #14:
score: 0
Accepted
time: 0ms
memory: 5872kb
input:
266 28 CBBCBBCCCCBCBBCBBBCBCBCBCBBCBCBBCCCCBCCCCCBCCBBCCBBCBCBBCCCCCCBBBCCCBCCBCBBCCCBCCCCCCBCBBCCCBCBBCCBCBBBCBCCCBBCBCCCCBBCBBCBBCCBBCCCCCBBCCCBCCCCCCCCBBBBBBCBCCBCCCCBBCBBBBCBCCCCCCCBCBBCBCCCCCCCCCCCBBBBCCCCBCBCCCBCCCCCCCCCBCBCCCBBBCCCBCCBCBBCBCCCCCCBCBCCCCBCBCCBCCCCBCB CCBCBCBBCBCBBCBCCCBBBCBCBB...
output:
206 2 239 2 240 2 214 2 215 3 190 3 191 3 164 3 165 7 140 7 141 8 114 8 115 8 88 8 89 9 61 9 62 9 34 9 35 9 14 9 15 10 253 10 254 11 227 11 228 12 200 12 201 13 174 13 175 13 148 13 149 14 121 14 122 19 94 19 95 19 69 19 70 29 45 29 46 40 22 40 23 42 262 42 263 44 235 44 236 46 209 46 210 46 185 46 ...
result:
ok moves = 206
Test #15:
score: 0
Accepted
time: 1ms
memory: 5920kb
input:
620 443 BBBBBBCBBBCBBCBCBCBBBBCCCBCCBCBBBBBBCCCBBBCCBBCBCBCBBCCCCBCBBCBCCCCBBBBBBCCCCCBBBBCCBCBBBBBCBCBBCBCBCCCCBCBBCBBBCBBBCCCBCCCBBBBBCCBBCCBBBCCBCCBCBBCBCCCCCCCCCBCBCBBBCBBCBBCBBBBBBBCCBBBBBBBBBBCBBCBBCBBCCCBBCCBBBBCCCBBBBBBCBBBBBBBBCBBCBCBBBCCBBBBCCBBBCBCBCBBBBBCBBCBBBBCBBBBCCBBBCBBBBBCBBCCCCBCC...
output:
484 7 181 7 182 10 361 10 362 12 539 12 540 13 99 13 100 14 279 14 280 18 459 18 460 18 18 18 19 18 196 18 197 19 374 19 375 19 552 19 553 20 112 20 113 26 290 26 291 26 469 26 470 26 29 26 30 29 208 29 209 29 386 29 387 31 566 31 567 32 124 32 125 33 302 33 303 35 481 35 482 35 40 35 41 35 218 35 2...
result:
ok moves = 484
Test #16:
score: 0
Accepted
time: 1ms
memory: 5684kb
input:
1446 646 CCCBCCCCCCCBBCCBBCCCCBBCCCBBCCCCCCCCCCCCCCCBCCCCCCCCBBCCBBCCCBCBBBCCCCBBCCCCCCCCCCCBCBCCCBBCCCCBBCBCBCCCCCCCBCCCCCCCBCCBCBBCCCCCCCCCCCCBCCCBCCCCCCBCCCBCCCCCBBCCCBBCCCBBBCCBCCBCCBBBCBCBCCCCBCBCCCBCCCCBBCCCCCCCBCCCCBCCCBBBCCCBCCBBCCCCBCCCBBCBCCCCCBBCCBCCCCCCBCCCCCCCCCCCCCCBCCCCCBCBCCCCBCCCCCB...
output:
874 4 801 4 802 11 159 11 160 11 962 11 963 13 321 13 322 13 1123 13 1124 17 486 17 487 17 1289 17 1290 20 644 20 645 20 1445 20 1446 35 808 35 809 43 164 43 165 43 968 43 969 45 329 45 330 45 1130 45 1131 48 491 48 492 49 1301 49 1302 49 659 49 660 49 15 49 16 53 822 53 823 53 179 53 180 64 981 64 ...
result:
ok moves = 874
Test #17:
score: 0
Accepted
time: 0ms
memory: 5860kb
input:
3374 2755 BCBBCBBBCBBBBBBBBBCCBBBBBBBCCBBCBBCBBBBBCBBBBBBBBCBBBBBBBBBBBBCBBBCCBBBBCBBBBBCBBBBBCBBBBCBBBBBBBBBCBBBBBBBBBBBCBBBBBBBCBBBBBBBBBBCCBBBBBBBBBCBBCBBBCBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCBBBCBBCBBBBBBBBBBBBBBCCBCBCBCBBBBCBBBCBBBBBBBBCBBCBCBBCBCCBBBBBBBBBBBCCBBBBBBBBBBBBBBBBBCBBBBBBBBBBB...
output:
1216 2 622 2 623 4 1251 4 1252 7 1880 7 1881 16 2502 16 2503 16 3131 16 3132 23 383 23 384 23 1006 23 1007 25 1641 25 1642 27 2265 27 2266 32 2913 32 2914 40 160 40 161 52 783 52 784 55 1413 55 1414 55 2033 55 2034 59 2657 59 2658 64 3293 64 3294 69 540 69 541 73 1166 73 1167 82 1786 82 1787 93 2407...
result:
ok moves = 1216
Test #18:
score: 0
Accepted
time: 5ms
memory: 6280kb
input:
7872 7827 BCBBCBCBBCCBCBBBCCCBBBBBBBCBBBBCCBCCBCBBBBBBCBBCBBBCCCBBBCCCCBCBBBBCBBCCBBBBCCBBCBBBCBCBBCBCBBCCBBBCCBBBBCCBBCBBBBBBCBBBBBBBBCCBBCCCCBCCCBBCCCBBCBCBBBCBBBBCBBBBCBCBBBCCBBCCCCBBBCBBCCBBBBBBCBBBBCCCBBBCCCBBCCCBBBBBBCCBBBCCCCBBBCBBCBCCBBBCCCCBCBBCCBBBBCCBBBCBBCBBBCBBBCBBBBCCBBBBBCCBCBCBBBBBBB...
output:
5928 2 46 2 47 4 92 4 93 5 138 5 139 7 185 7 186 7 231 7 232 8 277 8 278 11 324 11 325 11 371 11 372 11 423 11 424 18 471 18 472 22 518 22 519 22 564 22 565 23 612 23 613 23 660 23 661 24 708 24 709 30 756 30 757 32 803 32 804 35 849 35 850 35 900 35 901 35 946 35 947 38 994 38 995 38 1040 38 1041 3...
result:
ok moves = 5928
Test #19:
score: 0
Accepted
time: 9ms
memory: 8268kb
input:
18368 17997 CBBBBBBBBBBCBBBBBBBBBBBBBBCBBCCBBBBBBBBBBBBBCBCBBBBBBBBCBBBBBCBBBBBBBBBBBBBBCBBBBBBBBBBCBBBCBCBBBBBCBCBBCBBBBBBBBBBBBBCCCBBBBBBCBBBBCBCBBCBBBBBCBBBBBBBCCBBBBCCBCBBBBBBBBBBBBCBBBBBBBBCBCBBBBBBBBCBCBBBBBBBBBBBCBBBBCCBBBBBBBCBBBBBBBBBBBBBBBCCBBCBCBBCBCBBBCBBBBBBBBBBBBBCBBCBBBBBBBCCCBBBBBBBB...
output:
7330 1 373 1 374 11 749 11 750 25 1121 25 1122 27 1494 27 1495 27 1874 27 1875 40 2255 40 2256 41 2628 41 2629 49 3000 49 3001 54 3373 54 3374 68 3748 68 3749 78 4125 78 4126 81 4514 81 4515 82 4889 82 4890 87 5261 87 5262 88 5636 88 5637 90 6019 90 6020 103 6391 103 6392 103 6766 103 6767 103 7138 ...
result:
ok moves = 7330
Test #20:
score: 0
Accepted
time: 11ms
memory: 7740kb
input:
42858 28689 CCCCCCCCCCCCCCCCCCCCBCCCBBCCCBCCCCCCCCCBCCCCCCCBCCCBCCCCCBCCCCCCCCBCCBCCBCCCCCCCCCCCCCCCCCBCCCCCCCCCBCCCCBCCCCCCCCCCCCCCCCCCCCCCCCCCCCBCCCCCCCCCCCCCCCCCBBCCCCCCCCCCCCCCBBCCCBCCCCCCCCCCBCCCCCCCBCCCCBCBCCCBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCBCBCCCBCBCCCCCCCCCCCCCCBCCCCCCCCBCCCCCCCCCCCCCCCCCC...
output:
8086 21 14170 21 14171 24 28344 24 28345 24 42535 24 42536 27 13860 27 13861 36 28066 36 28067 43 42256 43 42257 46 13583 46 13584 51 27759 51 27760 59 41929 59 41930 61 13256 61 13257 63 27432 63 27433 80 41615 80 41616 89 12936 89 12937 93 27107 93 27108 121 41279 121 41280 138 12604 138 12605 138...
result:
ok moves = 8086
Test #21:
score: 0
Accepted
time: 66ms
memory: 10236kb
input:
100002 40466 BBBBBBBCCBCBCCBCBBBBCCBBCBBBBBBBBBBCBBBBCBBBBBCBBBBBBBBBCBBBCBBBCCBCBCBBBBBBCBBBBBBBCBBBBBCBBBBCBCBCBBBBBBBBCBBBBBBBBCBCBBBBCBBBBBBBBBBBBBCBCBBCBBBBBBBBBBBCBBBBBBBCBCBCBCBBBBBBBBCBCBBBBBBBBCBBBBBBBBCBCCBBBCCBBCBBCBBBBBBBBBBCBBBCBBBBBBBBBBBBCBBCCBBCBBCBBBBCBBBBCBBBCCBBBCBBBBBBBCBBBBCBBBC...
output:
45728 8 59539 8 59540 8 19080 8 19081 9 78617 9 78618 10 38154 10 38155 10 97692 10 97693 11 57228 11 57229 15 16766 15 16767 15 76303 15 76304 17 35840 17 35841 27 95377 27 95378 31 54917 31 54918 36 14455 36 14456 45 73993 45 73994 48 33534 48 33535 51 93075 51 93076 51 52612 51 52613 52 12152 52 ...
result:
ok moves = 45728
Test #22:
score: -100
Runtime Error
input:
233338 159967 CCBCBBCCCCBBCCCCCCCCBCCCBCCCCBCCBCCCCCCCCCBCBCCBBCBBCCCCBCCCCCCCCCCCCCCCCCCCBCCBCCBBCBCCBBBCCBCCCCBBCCCBCCCCCCCCCCCBCCBCCCCCCCCBCCCBBCBCCCBCCCCCBCCBCCBCCCCCCCBCCCCCBCCBBCCCCCCCBCCCCCCCCBBBCCCCCCCCCCCCBBBCCCBBCCBCBCCCCCCCCCBCCCCBCCCCCCCCBBCCCCBCCCCBCCCBCCCBCCCCCBCCCCCBBCCCBCCCCCCCCCCCCC...