QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#449450 | #8523. Puzzle II | 233L | ML | 96ms | 9932kb | C++14 | 3.5kb | 2024-06-21 10:30:31 | 2024-06-21 10:30:33 |
Judging History
answer
#include<bits/stdc++.h>
#define ll long long
#define ull unsigned long long
#define uint unsigned int
#define ldb long double
#define pii pair<int,int>
#define mkp make_pair
#define mkt make_tuple
#define fr first
#define se second
#define uset unordered_set
#define umap unordered_map
#define pqueue priority_queue
#define all(_box) _box.begin(),_box.end()
#define ppc __builtin_popcount
#define ctz __builtin_ctz
#define clz __builtin_clz
#define lbd lower_bound
#define ubd upper_bound
#define deb(x) cerr<<#x<<'='<<(x)<<' '
using namespace std;
mt19937 rng(random_device{}());
const int inf=0x3f3f3f3f;
const int N=3e5+4;
int n,k;
string s,t;
vector<pii>ans;
bool rbool(int p,int q){
return uniform_int_distribution<int>(1,q)(rng)<=p;
}
int rot1,rot2;
namespace FHQ{
int cnt;
struct node{
int ls,rs,siz,pos,fp;
node(){
ls=rs=siz=0;
pos=fp=inf;
}
node(bool f){
ls=rs=0;
siz=1;
pos=fp=f?0:inf;
}
}st[N];
#define ls(id) st[id].ls
#define rs(id) st[id].rs
void push_up(int id){
st[id].siz=st[ls(id)].siz+1+st[rs(id)].siz;
st[id].fp=min({
inf,
st[ls(id)].fp,
st[ls(id)].siz+st[id].pos,
st[ls(id)].siz+1+st[rs(id)].fp
});
}
void split(int id,int key,int &p,int &q){
if(!id){
p=q=0;
return;
}
if(st[ls(id)].siz+1<=key){
p=id,key-=st[ls(id)].siz+1;
split(rs(id),key,rs(p),q);
}
else{
q=id;
split(ls(id),key,p,ls(q));
}
push_up(id);
}
int merge(int p,int q){
if(!p||!q)return p|q;
if(rbool(st[p].siz,st[p].siz+st[q].siz)){
rs(p)=merge(rs(p),q);
push_up(p);
return p;
}
else{
ls(q)=merge(p,ls(q));
push_up(q);
return q;
}
}
#undef ls
#undef rs
void insert(int &rot,int pos,int cur){
int p,q;
split(rot,pos,p,q);
rot=merge(merge(p,cur),q);
}
int erase(int &rot,int pos){
int p,q,p1,p2;
split(rot,pos+1,p,q);
split(p,pos,p1,p2);
rot=merge(p1,q);
return p2;
}
}
using FHQ::insert;
using FHQ::erase;
void build(){
using namespace FHQ;
for(char c:s){
int cur=++cnt;
st[cur]=node(c!='B');
rot1=merge(rot1,cur);
}
for(char c:t){
int cur=++cnt;
st[cur]=node(c!='C');
rot2=merge(rot2,cur);
}
}
void perform(int p1,int p2){
ans.push_back({p1,(p2-k+n)%n});
ans.push_back({p1,(p2-k+n+1)%n});
int x=erase(rot1,p1);
int y=erase(rot2,p2);
FHQ::st[x]=FHQ::st[y]=FHQ::node(0);
if(p1+k-1>=n)
insert(rot1,n-2,erase(rot1,0));
insert(rot1,(p1+k-1)%n,y);
if(p2-k<0)
insert(rot2,0,erase(rot2,n-2));
insert(rot2,(p2-k+n)%n,x);
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
cin>>n>>k>>s>>t;
bool rev=0;
if(2*count(all(s),'B')<n)rev=1,swap(s,t);
build();
while(FHQ::st[rot1].fp!=inf){
assert(FHQ::st[rot2].fp!=inf);
perform(FHQ::st[rot1].fp,FHQ::st[rot2].fp);
}
cout<<ans.size()<<'\n';
for(auto i:ans){
if(rev)swap(i.fr,i.se);
cout<<i.fr+1<<' '<<i.se+1<<'\n';
}
}
详细
Test #1:
score: 100
Accepted
time: 2ms
memory: 9468kb
input:
6 3 BCCBCC BBCBBC
output:
4 4 3 5 3 2 6 3 6
result:
ok moves = 4
Test #2:
score: 0
Accepted
time: 3ms
memory: 9516kb
input:
2 1 BC BC
output:
2 2 2 2 1
result:
ok moves = 2
Test #3:
score: 0
Accepted
time: 3ms
memory: 9480kb
input:
2 1 BB CC
output:
0
result:
ok moves = 0
Test #4:
score: 0
Accepted
time: 0ms
memory: 9680kb
input:
2 1 CC BB
output:
0
result:
ok moves = 0
Test #5:
score: 0
Accepted
time: 0ms
memory: 9468kb
input:
3 1 CCC BBB
output:
0
result:
ok moves = 0
Test #6:
score: 0
Accepted
time: 3ms
memory: 9420kb
input:
3 1 CBC BCB
output:
2 1 2 2 2
result:
ok moves = 2
Test #7:
score: 0
Accepted
time: 0ms
memory: 9684kb
input:
3 2 BBB CCC
output:
0
result:
ok moves = 0
Test #8:
score: 0
Accepted
time: 0ms
memory: 9408kb
input:
3 2 BCB BCC
output:
2 2 2 2 3
result:
ok moves = 2
Test #9:
score: 0
Accepted
time: 0ms
memory: 9484kb
input:
4 2 CCCB BBCB
output:
2 2 3 3 3
result:
ok moves = 2
Test #10:
score: 0
Accepted
time: 0ms
memory: 9460kb
input:
9 6 CCCBCCCBB BBBCBBBCC
output:
6 7 4 8 4 4 7 5 7 4 7 5 7
result:
ok moves = 6
Test #11:
score: 0
Accepted
time: 0ms
memory: 9468kb
input:
21 3 CCCCBBCBCCCCCCCBCCCCC BBCCBCBBBBBBBBBCBBBBB
output:
8 2 3 3 3 3 3 4 3 5 6 6 6 13 16 14 16
result:
ok moves = 8
Test #12:
score: 0
Accepted
time: 3ms
memory: 9700kb
input:
49 41 CBCCBCCBCCBCCBCCCBBCCBCBBCCCBBCCBCBCBCBCCCCBCBCCB BCCCCBCBBBBCBCBBBBBCBBBBCCCCBCBBCBBCBBBBCBCBCBBBC
output:
38 10 2 11 2 9 2 10 2 13 2 14 2 16 2 17 2 9 3 10 3 23 7 24 7 9 8 10 8 28 13 29 13 33 17 34 17 34 17 35 17 38 17 39 17 9 17 10 17 41 18 42 18 9 20 10 20 45 22 46 22 9 26 10 26 3 31 4 31 4 33 5 33 8 38 9 38
result:
ok moves = 38
Test #13:
score: 0
Accepted
time: 3ms
memory: 9452kb
input:
114 8 BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
output:
0
result:
ok moves = 0
Test #14:
score: 0
Accepted
time: 0ms
memory: 9456kb
input:
266 28 CBBCBBCCCCBCBBCBBBCBCBCBCBBCBCBBCCCCBCCCCCBCCBBCCBBCBCBBCCCCCCBBBCCCBCCBCBBCCCBCCCCCCBCBBCCCBCBBCCBCBBBCBCCCBBCBCCCCBBCBBCBBCCBBCCCCCBBCCCBCCCCCCCCBBBBBBCBCCBCCCCBBCBBBBCBCCCCCCCBCBBCBCCCCCCCCCCCBBBBCCCCBCBCCCBCCCCCCCCCBCBCCCBBBCCCBCCBCBBCBCCCCCCBCBCCCCBCBCCBCCCCBCB CCBCBCBBCBCBBCBCCCBBBCBCBB...
output:
206 240 1 241 1 239 1 240 1 241 2 242 2 239 3 240 3 243 5 244 5 244 6 245 6 249 8 250 8 251 9 252 9 239 9 240 9 252 9 253 9 254 12 255 12 239 13 240 13 255 15 256 15 239 25 240 25 256 39 257 39 258 46 259 46 260 46 261 46 262 47 263 47 239 53 240 53 264 55 265 55 239 55 240 55 265 58 266 58 1 58 2 5...
result:
ok moves = 206
Test #15:
score: 0
Accepted
time: 3ms
memory: 9524kb
input:
620 443 BBBBBBCBBBCBBCBCBCBBBBCCCBCCBCBBBBBBCCCBBBCCBBCBCBCBBCCCCBCBBCBCCCCBBBBBBCCCCCBBBBCCBCBBBBBCBCBBCBCBCCCCBCBBCBBBCBBBCCCBCCCBBBBBCCBBCCBBBCCBCCBCBBCBCCCCCCCCCBCBCBBBCBBCBBCBBBBBBBCCBBBBBBBBBBCBBCBBCBBCCCBBCCBBBBCCCBBBBBBCBBBBBBBBCBBCBCBBBCCBBBBCCBBBCBCBCBBBBBCBBCBBBBCBBBBCCBBBCBBBBBCBBCCCCBCC...
output:
484 7 181 7 182 10 182 10 183 12 183 12 184 13 189 13 190 14 191 14 192 18 193 18 194 18 194 18 195 18 196 18 197 19 178 19 179 19 198 19 199 20 199 20 200 26 178 26 179 26 178 26 179 26 201 26 202 29 178 29 179 29 203 29 204 31 178 31 179 32 204 32 205 33 178 33 179 35 206 35 207 35 209 35 210 35 1...
result:
ok moves = 484
Test #16:
score: 0
Accepted
time: 4ms
memory: 9728kb
input:
1446 646 CCCBCCCCCCCBBCCBBCCCCBBCCCBBCCCCCCCCCCCCCCCBCCCCCCCCBBCCBBCCCBCBBBCCCCBBCCCCCCCCCCCBCBCCCBBCCCCBBCBCBCCCCCCCBCCCCCCCBCCBCBBCCCCCCCCCCCCBCCCBCCCCCCBCCCBCCCCCBBCCCBBCCCBBBCCBCCBCCBBBCBCBCCCCBCBCCCBCCCCBBCCCCCCCBCCCCBCCCBBBCCCBCCBBCCCCBCCCBBCBCCCCCBBCCBCCCCCCBCCCCCCCCCCCCCCBCCCCCBCBCCCCBCCCCCB...
output:
874 804 1 805 1 812 3 813 3 801 3 802 3 813 11 814 11 816 11 817 11 801 12 802 12 817 14 818 14 822 15 823 15 801 25 802 25 823 25 824 25 827 27 828 27 801 27 802 27 801 27 802 27 801 27 802 27 828 27 829 27 801 36 802 36 801 37 802 37 844 46 845 46 853 51 854 51 854 51 855 51 801 56 802 56 857 57 8...
result:
ok moves = 874
Test #17:
score: 0
Accepted
time: 0ms
memory: 9672kb
input:
3374 2755 BCBBCBBBCBBBBBBBBBCCBBBBBBBCCBBCBBCBBBBBCBBBBBBBBCBBBBBBBBBBBBCBBBCCBBBBCBBBBBCBBBBBCBBBBCBBBBBBBBBCBBBBBBBBBBBCBBBBBBBCBBBBBBBBBBCCBBBBBBBBBCBBCBBBCBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCBBBCBBCBBBBBBBBBBBBBBCCBCBCBCBBBBCBBBCBBBBBBBBCBBCBCBBCBCCBBBBBBBBBBBCCBBBBBBBBBBBBBBBBBCBBBBBBBBBBB...
output:
1216 2 622 2 623 4 637 4 638 7 620 7 621 16 642 16 643 16 643 16 644 23 645 23 646 23 649 23 650 25 650 25 651 27 655 27 656 32 656 32 657 40 620 40 621 52 662 52 663 55 665 55 666 55 666 55 667 59 676 59 677 64 687 64 688 69 698 69 699 73 699 73 700 82 620 82 621 93 718 93 719 100 725 100 726 110 7...
result:
ok moves = 1216
Test #18:
score: 0
Accepted
time: 7ms
memory: 9528kb
input:
7872 7827 BCBBCBCBBCCBCBBBCCCBBBBBBBCBBBBCCBCCBCBBBBBBCBBCBBBCCCBBBCCCCBCBBBBCBBCCBBBBCCBBCBBBCBCBBCBCBBCCBBBCCBBBBCCBBCBBBBBBCBBBBBBBBCCBBCCCCBCCCBBCCCBBCBCBBBCBBBBCBBBBCBCBBBCCBBCCCCBBBCBBCCBBBBBBCBBBBCCCBBBCCCBBCCCBBBBBBCCBBBCCCCBBBCBBCBCCBBBCCCCBCBBCCBBBBCCBBBCBBCBBBCBBBCBBBBCCBBBBBCCBCBCBBBBBBB...
output:
5928 2 46 2 47 4 49 4 50 5 46 5 47 7 46 7 47 7 51 7 52 8 46 8 47 11 52 11 53 11 53 11 54 11 58 11 59 18 46 18 47 22 46 22 47 22 59 22 60 23 63 23 64 23 64 23 65 24 66 24 67 30 46 30 47 32 67 32 68 35 46 35 47 35 46 35 47 35 68 35 69 38 69 38 70 38 46 38 47 38 72 38 73 38 73 38 74 39 46 39 47 43 79 4...
result:
ok moves = 5928
Test #19:
score: 0
Accepted
time: 17ms
memory: 9540kb
input:
18368 17997 CBBBBBBBBBBCBBBBBBBBBBBBBBCBBCCBBBBBBBBBBBBBCBCBBBBBBBBCBBBBBCBBBBBBBBBBBBBBCBBBBBBBBBBCBBBCBCBBBBBCBCBBCBBBBBBBBBBBBBCCCBBBBBBCBBBBCBCBBCBBBBBCBBBBBBBCCBBBBCCBCBBBBBBBBBBBBCBBBBBBBBCBCBBBBBBBBCBCBBBBBBBBBBBCBBBBCCBBBBBBBCBBBBBBBBBBBBBBBCCBBCBCBBCBCBBBCBBBBBBBBBBBBBCBBCBBBBBBBCCCBBBBBBBB...
output:
7330 1 373 1 374 11 381 11 382 25 372 25 373 27 372 27 373 27 382 27 383 40 372 40 373 41 389 41 390 49 392 49 393 54 415 54 416 68 416 68 417 78 417 78 418 81 421 81 422 82 436 82 437 87 438 87 439 88 372 88 373 90 441 90 442 103 457 103 458 103 470 103 471 103 476 103 477 109 480 109 481 113 481 1...
result:
ok moves = 7330
Test #20:
score: 0
Accepted
time: 20ms
memory: 9588kb
input:
42858 28689 CCCCCCCCCCCCCCCCCCCCBCCCBBCCCBCCCCCCCCCBCCCCCCCBCCCBCCCCCBCCCCCCCCBCCBCCBCCCCCCCCCCCCCCCCCBCCCCCCCCCBCCCCBCCCCCCCCCCCCCCCCCCCCCCCCCCCCBCCCCCCCCCCCCCCCCCBBCCCCCCCCCCCCCCBBCCCBCCCCCCCCCCBCCCCCCCBCCCCBCBCCCBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCBCBCCCBCBCCCCCCCCCCCCCCBCCCCCCCCBCCCCCCCCCCCCCCCCCC...
output:
8086 14190 1 14191 1 14194 2 14195 2 14170 6 14171 6 14195 10 14196 10 14199 13 14200 13 14209 24 14210 24 14217 36 14218 36 14221 36 14222 36 14227 39 14228 39 14236 46 14237 46 14239 46 14240 46 14242 71 14243 71 14260 73 14261 73 14270 75 14271 75 14275 76 14276 76 14304 87 14305 87 14322 89 1432...
result:
ok moves = 8086
Test #21:
score: 0
Accepted
time: 96ms
memory: 9932kb
input:
100002 40466 BBBBBBBCCBCBCCBCBBBBCCBBCBBBBBBBBBBCBBBBCBBBBBCBBBBBBBBBCBBBCBBBCCBCBCBBBBBBCBBBBBBBCBBBBBCBBBBCBCBCBBBBBBBBCBBBBBBBBCBCBBBBCBBBBBBBBBBBBBCBCBBCBBBBBBBBBBBCBBBBBBBCBCBCBCBBBBBBBBCBCBBBBBBBBCBBBBBBBBCBCCBBBCCBBCBBCBBBBBBBBBBCBBBCBBBBBBBBBBBBCBBCCBBCBBCBBBBCBBBBCBBBCCBBBCBBBBBBBCBBBBCBBBC...
output:
45728 8 59539 8 59540 8 59537 8 59538 9 59543 9 59544 10 59547 10 59548 10 59549 10 59550 11 59550 11 59551 15 59554 15 59555 15 59567 15 59568 17 59569 17 59570 27 59570 27 59571 31 59571 31 59572 36 59537 36 59538 45 59572 45 59573 48 59574 48 59575 51 59537 51 59538 51 59581 51 59582 52 59582 52 ...
result:
ok moves = 45728
Test #22:
score: -100
Memory Limit Exceeded
input:
233338 159967 CCBCBBCCCCBBCCCCCCCCBCCCBCCCCBCCBCCCCCCCCCBCBCCBBCBBCCCCBCCCCCCCCCCCCCCCCCCCBCCBCCBBCBCCBBBCCBCCCCBBCCCBCCCCCCCCCCCBCCBCCCCCCCCBCCCBBCBCCCBCCCCCBCCBCCBCCCCCCCBCCCCCBCCBBCCCCCCCBCCCCCCCCBBBCCCCCCCCCCCCBBBCCCBBCCBCBCCCCCCCCCBCCCCBCCCCCCCCBBCCCCBCCCCBCCCBCCCBCCCCCBCCCCCBBCCCBCCCCCCCCCCCCC...