QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#443219#8523. Puzzle IIucup-team266#TL 818ms5064kbC++143.8kb2024-06-15 14:48:272024-06-15 14:48:29

Judging History

This is the latest submission verdict.

  • [2024-06-15 14:48:29]
  • Judged
  • Verdict: TL
  • Time: 818ms
  • Memory: 5064kb
  • [2024-06-15 14:48:27]
  • Submitted

answer

#include<bits/stdc++.h>
#define rep(i, n) for(int i = 0; i < (n); ++i)
using namespace std;
typedef long long ll;
typedef long double ld;
typedef unsigned long long ull;
typedef vector<int> vi;
typedef pair<int, int> pii;
typedef pair<ll, int> pli;
typedef pair<ll, ll> pll;
typedef array<int, 3> ai3;
const int inf = 0x3f3f3f3f;
const ll INF = 0x3f3f3f3f3f3f3f3fll;
const int Mod = 1e9 + 7;
inline void uadd(int &a, int b){ a += b-Mod; a += (a>>31) & Mod; }
inline void usub(int &a, int b){ a -= b, a += (a>>31) & Mod; }
inline void umul(int &a, int b){ a = (int)(1ll * a * b % Mod); }
inline int add(int a, int b){ a += b-Mod; a += (a>>31) & Mod; return a; }
inline int sub(int a, int b){ a -= b, a += (a>>31) & Mod; return a; }
inline int mul(int a, int b){ a = (int)(1ll * a * b % Mod); return a; }
int qpow(int b, ll p){ int ret = 1; while(p){ if(p&1) umul(ret, b); umul(b, b), p >>= 1; } return ret; }
const int fN = 10010;
int fact[fN], invfact[fN], pw2[fN], invpw2[fN], inv[fN];
void initfact(int n){
	pw2[0] = 1; for(int i = 1; i <= n; ++i) pw2[i] = mul(pw2[i-1], 2);
	invpw2[0] = 1; for(int i = 1; i <= n; ++i) invpw2[i] = mul(invpw2[i-1], (Mod+1) / 2);
	fact[0] = 1; for(int i = 1; i <= n; ++i) fact[i] = mul(fact[i-1], i);
	invfact[n] = qpow(fact[n], Mod-2); for(int i = n; i > 0; --i) invfact[i-1] = mul(invfact[i], i);
	for(int i = 1; i <= n; ++i) inv[i] = mul(invfact[i], fact[i-1]);
}
int binom(int n, int m){ return (m < 0 || m > n) ? 0 : mul(fact[n], mul(invfact[m], invfact[n-m])); }
const double pi = acos(-1);
template<typename T> inline void chmax(T &_a, T _b){ (_a<_b) ? (_a=_b) : 0; }
template<typename T> inline void chmin(T &_a, T _b){ (_b<_a) ? (_a=_b) : 0; }
mt19937_64 rng(58);
inline int myrand(int l, int r){ return (int)(rng() % (r-l+1)) + l; }

int n, k;
int a[300300], b[300300];
int apre[300300], anxt[300300], bpre[300300], bnxt[300300];

int main(){
	//freopen("g.in", "r", stdin);
	//freopen("g.out", "w", stdout);
	ios::sync_with_stdio(false);
	cin.tie(0);
	
	cin >> n >> k;
	{
		string s;
		cin >> s;
		rep(i, n) a[i] = (s[i] == 'C');
	}
	{
		string s;
		cin >> s;
		rep(i, n) b[i] = (s[i] == 'C');
	}

	int c1 = 0;
	rep(i, n) c1 += a[i];
	if(c1 > (n/2)){
		rep(i, n) a[i] ^= 1, b[i] ^= 1;
		c1 = n - c1;
	}

	rep(i, n) apre[i] = bpre[i] = (i + n - 1) % n, anxt[i] = bnxt[i] = (i + 1) % n;

	vector<pii> ans;
	int ap0 = 0, apk = k-1, aid = 0, bp0 = 0, bpk = k-1, bid = 0;
	while(c1--){
		while(a[ap0] != 1) ap0 = anxt[ap0], apk = anxt[apk], aid = (aid + 1) % n;
		while(b[bnxt[bpk]] != 0) bp0 = bnxt[bp0], bpk = bnxt[bpk], bid = (bid + 1) % n;
		ans.push_back(make_pair(aid, bid)), ans.push_back(make_pair(aid, (bid + 1) % n));
		swap(a[ap0], b[bnxt[bpk]]);
		if(k != 1){
			int nap0 = anxt[ap0], napk = ap0;
			anxt[apre[ap0]] = anxt[ap0], apre[anxt[ap0]] = apre[ap0];
			apre[ap0] = apk, anxt[ap0] = anxt[apk];
			apre[anxt[apk]] = ap0, anxt[apk] = ap0;
			ap0 = nap0, apk = napk;
		}
		if(k == n-1){
			bp0 = bpre[bp0], bpk = bpre[bpk];
		} else if(k == 1){
			bpk = bnxt[bpk];
			bnxt[bpre[bp0]] = bpk, bpre[bnxt[bpk]] = bp0;
			bpre[bpk] = bpre[bp0], bnxt[bp0] = bnxt[bpk];
			bnxt[bpk] = bp0, bpre[bp0] = bpk;
			bp0 = bpk;
		} else {
			int nbp0 = bnxt[bpk], nbpk = bpre[bpk];
			bpk = bnxt[bpk];
			bnxt[bpre[bpk]] = bnxt[bpk], bpre[bnxt[bpk]] = bpre[bpk];
			bpre[bpk] = bpre[bp0], bnxt[bpk] = bp0;
			bnxt[bpre[bp0]] = bpk, bpre[bp0] = bpk;
			bp0 = nbp0, bpk = nbpk;
		}

		{
			deque<int> tmpa, tmpb;
			for(int i = ap0, cc = 0; cc < n; i = anxt[i], ++cc)
				assert(apre[anxt[i]] == i), tmpa.push_back(i);
			for(int i = bp0, cc = 0; cc < n; i = bnxt[i], ++cc)
				assert(bpre[bnxt[i]] == i), tmpb.push_back(i);
		}
	}

	cout << (int)ans.size() << "\n";
	rep(i, (int)ans.size()) cout << ans[i].first + 1 << " " << ans[i].second + 1 << "\n";

	return 0;
}

詳細信息

Test #1:

score: 100
Accepted
time: 1ms
memory: 3564kb

input:

6 3
BCCBCC
BBCBBC

output:

4
1 3
1 4
4 1
4 2

result:

ok moves = 4

Test #2:

score: 0
Accepted
time: 1ms
memory: 3640kb

input:

2 1
BC
BC

output:

2
2 2
2 1

result:

ok moves = 2

Test #3:

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

input:

2 1
BB
CC

output:

0

result:

ok moves = 0

Test #4:

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

input:

2 1
CC
BB

output:

0

result:

ok moves = 0

Test #5:

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

input:

3 1
CCC
BBB

output:

0

result:

ok moves = 0

Test #6:

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

input:

3 1
CBC
BCB

output:

2
2 1
2 2

result:

ok moves = 2

Test #7:

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

input:

3 2
BBB
CCC

output:

0

result:

ok moves = 0

Test #8:

score: 0
Accepted
time: 1ms
memory: 3796kb

input:

3 2
BCB
BCC

output:

2
2 2
2 3

result:

ok moves = 2

Test #9:

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

input:

4 2
CCCB
BBCB

output:

2
4 1
4 2

result:

ok moves = 2

Test #10:

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

input:

9 6
CCCBCCCBB
BBBCBBBCC

output:

6
4 2
4 3
7 3
7 4
7 9
7 1

result:

ok moves = 6

Test #11:

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

input:

21 3
CCCCBBCBCCCCCCCBCCCCC
BBCCBCBBBBBBBBBCBBBBB

output:

8
5 1
5 2
5 1
5 2
8 3
8 4
16 13
16 14

result:

ok moves = 8

Test #12:

score: 0
Accepted
time: 1ms
memory: 3852kb

input:

49 41
CBCCBCCBCCBCCBCCCBBCCBCBBCCCBBCCBCBCBCBCCCCBCBCCB
BCCCCBCBBBBCBCBBBBBCBBBBCCCCBCBBCBBCBBBBCBCBCBBBC

output:

38
2 2
2 3
4 4
4 5
6 8
6 9
8 11
8 12
10 13
10 14
13 14
13 15
13 15
13 16
15 18
15 19
16 28
16 29
16 30
16 31
19 37
19 38
19 43
19 44
21 44
21 45
22 46
22 47
23 47
23 48
24 49
24 1
29 7
29 8
31 11
31 12
35 17
35 18

result:

ok moves = 38

Test #13:

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

input:

114 8
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC

output:

0

result:

ok moves = 0

Test #14:

score: 0
Accepted
time: 1ms
memory: 3580kb

input:

266 28
CBBCBBCCCCBCBBCBBBCBCBCBCBBCBCBBCCCCBCCCCCBCCBBCCBBCBCBBCCCCCCBBBCCCBCCBCBBCCCBCCCCCCBCBBCCCBCBBCCBCBBBCBCCCBBCBCCCCBBCBBCBBCCBBCCCCCBBCCCBCCCCCCCCBBBBBBCBCCBCCCCBBCBBBBCBCCCCCCCBCBBCBCCCCCCCCCCCBBBBCCCCBCBCCCBCCCCCCCCCBCBCCCBBBCCCBCCBCBBCBCCCCCCBCBCCCCBCBCCBCCCCBCB
CCBCBCBBCBCBBCBCCCBBBCBCBB...

output:

206
2 5
2 6
2 13
2 14
3 20
3 21
3 21
3 22
7 23
7 24
8 29
8 30
8 32
8 33
9 33
9 34
9 37
9 38
9 38
9 39
10 43
10 44
11 44
11 45
12 46
12 47
13 48
13 49
13 50
13 51
14 52
14 53
19 54
19 55
19 56
19 57
29 58
29 59
40 60
40 61
42 62
42 63
44 67
44 68
46 68
46 69
46 71
46 72
47 72
47 73
48 73
48 74
48 76
...

result:

ok moves = 206

Test #15:

score: 0
Accepted
time: 1ms
memory: 3824kb

input:

620 443
BBBBBBCBBBCBBCBCBCBBBBCCCBCCBCBBBBBBCCCBBBCCBBCBCBCBBCCCCBCBBCBCCCCBBBBBBCCCCCBBBBCCBCBBBBBCBCBBCBCBCCCCBCBBCBBBCBBBCCCBCCCBBBBBCCBBCCBBBCCBCCBCBBCBCCCCCCCCCBCBCBBBCBBCBBCBBBBBBBCCBBBBBBBBBBCBBCBBCBBCCCBBCCBBBBCCCBBBBBBCBBBBBBBBCBBCBCBBBCCBBBBCCBBBCBCBCBBBBBCBBCBBBBCBBBBCCBBBCBBBBBCBBCCCCBCC...

output:

484
7 1
7 2
10 1
10 2
12 2
12 3
13 5
13 6
14 7
14 8
18 10
18 11
18 13
18 14
18 14
18 15
19 19
19 20
19 25
19 26
20 26
20 27
26 27
26 28
26 33
26 34
26 35
26 36
29 36
29 37
29 42
29 43
31 43
31 44
32 44
32 45
33 46
33 47
35 48
35 49
35 51
35 52
35 56
35 57
35 58
35 59
36 59
36 60
38 61
38 62
39 63
39...

result:

ok moves = 484

Test #16:

score: 0
Accepted
time: 4ms
memory: 3928kb

input:

1446 646
CCCBCCCCCCCBBCCBBCCCCBBCCCBBCCCCCCCCCCCCCCCBCCCCCCCCBBCCBBCCCBCBBBCCCCBBCCCCCCCCCCCBCBCCCBBCCCCBBCBCBCCCCCCCBCCCCCCCBCCBCBBCCCCCCCCCCCCBCCCBCCCCCCBCCCBCCCCCBBCCCBBCCCBBBCCBCCBCCBBBCBCBCCCCBCBCCCBCCCCBBCCCCCCCBCCCCBCCCBBBCCCBCCBBCCCCBCCCBBCBCCCCCBBCCBCCCCCCBCCCCCCCCCCCCCCBCCCCCBCBCCCCBCCCCCB...

output:

874
4 2
4 3
11 3
11 4
11 4
11 5
13 5
13 6
13 7
13 8
17 10
17 11
17 14
17 15
20 18
20 19
20 19
20 20
35 22
35 23
43 23
43 24
43 24
43 25
45 25
45 26
45 26
45 27
48 29
48 30
49 32
49 33
49 35
49 36
49 37
49 38
53 41
53 42
53 45
53 46
64 47
64 48
65 48
65 49
68 49
68 50
68 50
68 51
72 64
72 65
72 66
72...

result:

ok moves = 874

Test #17:

score: 0
Accepted
time: 11ms
memory: 3776kb

input:

3374 2755
BCBBCBBBCBBBBBBBBBCCBBBBBBBCCBBCBBCBBBBBCBBBBBBBBCBBBBBBBBBBBBCBBBCCBBBBCBBBBBCBBBBBCBBBBCBBBBBBBBBCBBBBBBBBBBBCBBBBBBBCBBBBBBBBBBCCBBBBBBBBBCBBCBBBCBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCBBBCBBCBBBBBBBBBBBBBBCCBCBCBCBBBBCBBBCBBBBBBBBCBBCBCBBCBCCBBBBBBBBBBBCCBBBBBBBBBBBBBBBBBCBBBBBBBBBBB...

output:

1216
2 5
2 6
4 10
4 11
7 20
7 21
16 21
16 22
16 27
16 28
23 28
23 29
23 39
23 40
25 61
25 62
27 62
27 63
32 64
32 65
40 76
40 77
52 82
52 83
55 92
55 93
55 108
55 109
59 114
59 115
64 118
64 119
69 120
69 121
73 123
73 124
82 125
82 126
93 129
93 130
100 132
100 133
110 133
110 134
110 134
110 135
1...

result:

ok moves = 1216

Test #18:

score: 0
Accepted
time: 111ms
memory: 4136kb

input:

7872 7827
BCBBCBCBBCCBCBBBCCCBBBBBBBCBBBBCCBCCBCBBBBBBCBBCBBBCCCBBBCCCCBCBBBBCBBCCBBBBCCBBCBBBCBCBBCBCBBCCBBBCCBBBBCCBBCBBBBBBCBBBBBBBBCCBBCCCCBCCCBBCCCBBCBCBBBCBBBBCBBBBCBCBBBCCBBCCCCBBBCBBCCBBBBBBCBBBBCCCBBBCCCBBCCCBBBBBBCCBBBCCCCBBBCBBCBCCBBBCCCCBCBBCCBBBBCCBBBCBBCBBBCBBBCBBBBCCBBBBBCCBCBCBBBBBBB...

output:

5928
2 3
2 4
4 4
4 5
5 6
5 7
7 8
7 9
7 13
7 14
8 16
8 17
11 18
11 19
11 19
11 20
11 20
11 21
18 22
18 23
22 25
22 26
22 28
22 29
23 29
23 30
23 31
23 32
24 36
24 37
30 37
30 38
32 41
32 42
35 43
35 44
35 44
35 45
35 46
35 47
38 52
38 53
38 55
38 56
38 56
38 57
38 57
38 58
39 68
39 69
43 69
43 70
45 ...

result:

ok moves = 5928

Test #19:

score: 0
Accepted
time: 317ms
memory: 4200kb

input:

18368 17997
CBBBBBBBBBBCBBBBBBBBBBBBBBCBBCCBBBBBBBBBBBBBCBCBBBBBBBBCBBBBBCBBBBBBBBBBBBBBCBBBBBBBBBBCBBBCBCBBBBBCBCBBCBBBBBBBBBBBBBCCCBBBBBBCBBBBCBCBBCBBBBBCBBBBBBBCCBBBBCCBCBBBBBBBBBBBBCBBBBBBBBCBCBBBBBBBBCBCBBBBBBBBBBBCBBBBCCBBBBBBBCBBBBBBBBBBBBBBBCCBBCBCBBCBCBBBCBBBBBBBBBBBBBCBBCBBBBBBBCCCBBBBBBBB...

output:

7330
1 1
1 2
11 1
11 2
25 7
25 8
27 17
27 18
27 23
27 24
40 34
40 35
41 35
41 36
49 37
49 38
54 49
54 50
68 50
68 51
78 52
78 53
81 53
81 54
82 54
82 55
87 55
87 56
88 58
88 59
90 64
90 65
103 66
103 67
103 79
103 80
103 82
103 83
109 86
109 87
113 99
113 100
114 103
114 104
116 114
116 115
121 128
...

result:

ok moves = 7330

Test #20:

score: 0
Accepted
time: 818ms
memory: 5064kb

input:

42858 28689
CCCCCCCCCCCCCCCCCCCCBCCCBBCCCBCCCCCCCCCBCCCCCCCBCCCBCCCCCBCCCCCCCCBCCBCCBCCCCCCCCCCCCCCCCCBCCCCCCCCCBCCCCBCCCCCCCCCCCCCCCCCCCCCCCCCCCCBCCCCCCCCCCCCCCCCCBBCCCCCCCCCCCCCCBBCCCBCCCCCCCCCCBCCCCCCCBCCCCBCBCCCBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCBCBCCCBCBCCCCCCCCCCCCCCBCCCCCCCCBCCCCCCCCCCCCCCCCCC...

output:

8086
21 8
21 9
24 23
24 24
24 32
24 33
27 37
27 38
36 46
36 47
43 75
43 76
46 84
46 85
51 92
51 93
59 98
59 99
61 107
61 108
63 121
63 122
80 122
80 123
89 130
89 131
93 159
93 160
121 169
121 170
138 182
138 183
138 186
138 187
152 209
152 210
152 211
152 212
155 236
155 237
165 242
165 243
172 247...

result:

ok moves = 8086

Test #21:

score: -100
Time Limit Exceeded

input:

100002 40466
BBBBBBBCCBCBCCBCBBBBCCBBCBBBBBBBBBBCBBBBCBBBBBCBBBBBBBBBCBBBCBBBCCBCBCBBBBBBCBBBBBBBCBBBBBCBBBBCBCBCBBBBBBBBCBBBBBBBBCBCBBBBCBBBBBBBBBBBBBCBCBBCBBBBBBBBBBBCBBBBBBBCBCBCBCBBBBBBBBCBCBBBBBBBBCBBBBBBBBCBCCBBBCCBBCBBCBBBBBBBBBBCBBBCBBBBBBBBBBBBCBBCCBBCBBCBBBBCBBBBCBBBCCBBBCBBBBBBBCBBBBCBBBC...

output:


result: