QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#444488#8523. Puzzle IIucup-team3564#RE 66ms10236kbC++204.0kb2024-06-15 19:34:402024-06-15 19:34:43

Judging History

This is the latest submission verdict.

  • [2024-06-15 19:34:43]
  • Judged
  • Verdict: RE
  • Time: 66ms
  • Memory: 10236kb
  • [2024-06-15 19:34:40]
  • 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 = 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?
*/

详细

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

output:


result: