QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#449450#8523. Puzzle II233LML 96ms9932kbC++143.5kb2024-06-21 10:30:312024-06-21 10:30:33

Judging History

This is the latest submission verdict.

  • [2024-06-21 10:30:33]
  • Judged
  • Verdict: ML
  • Time: 96ms
  • Memory: 9932kb
  • [2024-06-21 10:30:31]
  • Submitted

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';
    }
}

Details

Tip: Click on the bar to expand more detailed information

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

output:


result: