QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#444490#8523. Puzzle IIucup-team3564#WA 169ms20788kbC++204.0kb2024-06-15 19:35:142024-06-15 19:35:15

Judging History

This is the latest submission verdict.

  • [2024-06-15 19:35:15]
  • Judged
  • Verdict: WA
  • Time: 169ms
  • Memory: 20788kb
  • [2024-06-15 19:35:14]
  • Submitted

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 = 6e5 + 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);
		// 	}
		// }
	}
	assert(ans.size() <= n);
	cout << ans.size() << '\n';
	for (auto [a, b]: ans) cout << (a - 1) % n + 1 << ' ' << (b - 1) % n + 1 << '\n';
	return 0;
}
/* why?
*/

详细

Test #1:

score: 100
Accepted
time: 2ms
memory: 10020kb

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: 3ms
memory: 9660kb

input:

2 1
BC
BC

output:

2
2 2
2 1

result:

ok moves = 2

Test #3:

score: 0
Accepted
time: 3ms
memory: 9716kb

input:

2 1
BB
CC

output:

0

result:

ok moves = 0

Test #4:

score: 0
Accepted
time: 3ms
memory: 11700kb

input:

2 1
CC
BB

output:

0

result:

ok moves = 0

Test #5:

score: 0
Accepted
time: 0ms
memory: 11752kb

input:

3 1
CCC
BBB

output:

0

result:

ok moves = 0

Test #6:

score: 0
Accepted
time: 0ms
memory: 11988kb

input:

3 1
CBC
BCB

output:

2
2 1
2 2

result:

ok moves = 2

Test #7:

score: 0
Accepted
time: 0ms
memory: 11756kb

input:

3 2
BBB
CCC

output:

0

result:

ok moves = 0

Test #8:

score: 0
Accepted
time: 3ms
memory: 10012kb

input:

3 2
BCB
BCC

output:

2
2 2
2 3

result:

ok moves = 2

Test #9:

score: 0
Accepted
time: 2ms
memory: 9776kb

input:

4 2
CCCB
BBCB

output:

2
4 1
4 2

result:

ok moves = 2

Test #10:

score: 0
Accepted
time: 3ms
memory: 9780kb

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: 2ms
memory: 9724kb

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: 2ms
memory: 9772kb

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: 2ms
memory: 9780kb

input:

114 8
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC

output:

0

result:

ok moves = 0

Test #14:

score: 0
Accepted
time: 3ms
memory: 11864kb

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: 3ms
memory: 9800kb

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: 2ms
memory: 9824kb

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: 12144kb

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: 3ms
memory: 10336kb

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: 3ms
memory: 10440kb

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: 13ms
memory: 11248kb

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: 70ms
memory: 16864kb

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
Wrong Answer
time: 169ms
memory: 20788kb

input:

233338 159967
CCBCBBCCCCBBCCCCCCCCBCCCBCCCCBCCBCCCCCCCCCBCBCCBBCBBCCCCBCCCCCCCCCCCCCCCCCCCBCCBCCBBCBCCBBBCCBCCCCBBCCCBCCCCCCCCCCCBCCBCCCCCCCCBCCCBBCBCCCBCCCCCBCCBCCBCCCCCCCBCCCCCBCCBBCCCCCCCBCCCCCCCCBBBCCCCCCCCCCCCBBBCCCBBCCBCBCCCCCCCCCBCCCCBCCCCCCCCBBCCCCBCCCCBCCCBCCCBCCCCCBCCCCCBBCCCBCCCCCCCCCCCCC...

output:

103344
3 73372
3 73373
4 146744
4 146745
4 220119
4 220120
8 60157
8 60158
8 133531
8 133532
16 206904
16 206905
19 46938
19 46939
23 120311
23 120312
25 193685
25 193686
34 33735
34 33736
35 107115
35 107116
37 180502
37 180503
37 20545
37 20546
38 93918
38 93919
38 167292
38 167293
42 7327
42 7328...

result:

wrong answer Integer -17542 violates the range [1, 233338]