QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#443219 | #8523. Puzzle II | ucup-team266# | TL | 818ms | 5064kb | C++14 | 3.8kb | 2024-06-15 14:48:27 | 2024-06-15 14:48:29 |
Judging History
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...