QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#343785#1817. AND PermutationLaStataleBlueAC ✓2359ms126256kbC++234.8kb2024-03-03 02:18:072024-03-03 02:18:07

Judging History

你现在查看的是最新测评结果

  • [2024-03-03 02:18:07]
  • 评测
  • 测评结果:AC
  • 用时:2359ms
  • 内存:126256kb
  • [2024-03-03 02:18:07]
  • 提交

answer

#include "bits/stdc++.h"
using namespace std;
typedef long long ll;
typedef long double db;

#define TESTCASE 0

static void solve([[maybe_unused]] int tc) {
    int n;
    cin >> n;
    vector<long long> a(n);
    
    for (int i = 0; i < n; i++)cin >> a[i];
    
    /*
    set<int> ds;
    vector<long long> a;
    
    for(int i=0;i<3;i++){
        int x=rand()%128;
        for(int j=0;j<128;j++)if((x&j)==j)ds.insert(j);
    }
    for(auto i : ds)a.push_back(i);
    int n=a.size();
    
    cout<<n<<"\n";
    for(auto i : a)cout<<i<<" ";
    cout<<"\n";
    */
    if (n == 1) {
        cout << "0\n";
        return;
    }
    
    auto solve = [&](auto &solve, int pos, vector<long long> v) -> map<long long, long long> {
        if (v.size() == 0) {
            return map<long long, long long>();
        }
        if (v.size() == 2) {
            return map<long long, long long>{{v[0], v[1]},
                {v[1], v[0]}};
        }
        if (v.size() == 1) {
            return map<long long, long long>{{v[0], v[0]}};
        }
        
        //cout<<pos<<" bit\n";
        //for(auto i : v)cout<<i<<" ";
        //cout<<"\n";
        
        map<long long, long long> res;
        
        vector<long long> v0, v1;
        for (auto i: v) {
            if (i & (1ll << pos))v1.push_back(i);
            else v0.push_back(i);
        }
        
        map<long long, long long> sol0, sol1;
        sol0 = solve(solve, pos - 1, v0);
        sol1 = solve(solve, pos - 1, v1);
        
        //cout<<pos<<" bit ritorno\n";
        //for(auto i : v)cout<<i<<" ";
        //cout<<"\n";
        
        
        //cout<<"sol0 \n";
        //for(auto [i,j] : sol0)cout<<i<<" "<<j<<"\n";
        //cout<<"sol1 \n";
        //for(auto [i,j] : sol1)cout<<i<<" "<<j<<"\n";
        
        map<long long, int> col;
        auto dfs = [&](auto &dfs, long long nodo, int mode) -> void {
            
            if (col.find(nodo) != col.end())return;
            
            //cout << pos << " "<<mode<<" dfs\n";
            col[nodo] = mode;
            
            dfs(dfs, sol1[nodo], mode ^ 1);
            
            //cout<<"da "<<pos<<"check "<<(pos ^ (1ll << pos))<<"\n";
            if (sol0.find(nodo ^ (1ll << pos)) != sol0.end())
                if (sol1.find(sol0[nodo ^ (1ll << pos)] ^ (1ll << pos)) != sol1.end()) {
                dfs(dfs, sol0[nodo ^ (1ll << pos)] ^ (1ll << pos), mode ^ 1);
            }
        };
        
        long long loop0 = -1, loop1 = -1;
        int cont0=0;
        int cont1=0;
        
        for (auto [i, j]: sol0) {
            if (i == j)loop0 = i,cont0++;
        }
        for (auto [i, j]: sol1) {
            if (i == j)loop1 = i,cont1++;
        }
        //assert(cont0<=1 && cont1<=1);
        
        
        if(loop1!=-1 && loop0==-1)dfs(dfs,loop1,1);
        if(loop0!=-1 && loop1==-1 && sol1.find(loop0^(1ll<<pos))!=sol1.end())dfs(dfs,loop0^(1ll<<pos),0);
        for (auto i: v1)if (sol1[i] != i)dfs(dfs, i, 1);
        
        
        if (loop0 != -1 && loop1 != -1) {
            //assert((loop0^(1<<pos))==loop1);
            //assert(col[loop1]==0);
            sol0[loop0] = loop1;
            sol1[loop1] = loop0;
            loop0 = -1;
            loop1 = -1;
        }
        
        for (auto [i, j]: sol1) {
            if (col[i] == 1) {
                if(i==j){
                    long long a=i^(1ll<<pos);
                    long long b=sol0[a];
                    
                    sol1[i]=b;
                    sol0[b]=i;
                    sol0[a]=a;
                    continue;
                }
                long long a = i ^ (1ll << pos);
                long long b = sol0[a];
                //assert(a!=b);
                
                sol1[i] = b;
                sol1[j] = a;
                sol0[a] = j;
                sol0[b] = i;
            }
        }
        
        
        for (auto [i, j]: sol0)res[i] = j;
        for (auto [i, j]: sol1)res[i] = j;
        
        int cont=0;
        for(auto [i,j] : res){
            if(i==j)cont++;
            //cout<<i<<" -> "<<j<<"\n";
            //assert(((i&((1ll<<(pos+1))-1))&(j&((1ll<<(pos+1))-1)))==0);
            
        }
        assert(cont<=1);
        
        return res;
    };    
    auto sol = solve(solve, 59, a);
    
    for (int i = 0; i < n; i++) {
        cout << sol[a[i]] << "\n";
        //assert((a[i]&sol[a[i]])==0);
    }
}

int main() {
    //ios::sync_with_stdio(false);
    
    if (const char *f = getenv("REDIRECT_STDOUT"); f) {
        freopen(f, "w", stdout);
    }
    
    srand(42);
    int T = 1;
#if TESTCASE
    cin >> T;
#endif
    
    for (int t = 1; t <= T; t++) {
        solve(t);
    }
    
    return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

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

input:

6
0
1
4
5
2
6

output:

4
6
0
2
5
1

result:

ok OK!

Test #2:

score: 0
Accepted
time: 2ms
memory: 4268kb

input:

272
315
138
126
6
394
297
44
273
84
200
9
197
396
133
16
46
65
87
86
336
316
174
140
162
250
306
52
188
57
36
63
192
320
388
10
156
15
208
38
32
31
228
30
305
234
384
220
142
72
27
337
110
94
317
304
242
398
209
5
323
29
284
301
309
244
230
261
61
254
266
194
296
275
313
80
206
214
88
308
18
288
106...

output:

196
309
129
313
116
86
210
238
168
55
310
58
114
90
199
208
318
384
297
47
194
337
307
285
4
141
267
66
390
218
256
62
151
122
244
98
112
46
209
287
288
283
224
142
277
87
35
305
182
292
174
145
160
2
206
261
49
38
314
148
290
226
146
138
10
280
242
386
257
132
316
215
204
6
303
304
265
135
11
236
3...

result:

ok OK!

Test #3:

score: 0
Accepted
time: 39ms
memory: 8216kb

input:

5134
36416
73248
85220
2072
16524
36385
101507
91137
17604
22
640
70530
66850
107792
81952
163
84260
46246
45090
101411
18824
66360
116881
400
50338
109824
17508
122881
98691
99843
36481
1696
102658
27008
2566
4
32900
103171
1153
104706
69923
82280
19616
66849
17540
36870
8352
117777
82156
6785
6780...

output:

70048
8256
264
67363
68960
70018
4896
35216
67880
69064
105763
35873
4237
18561
46214
106240
1224
16384
17540
21136
66660
57473
9472
125953
2116
16529
67976
6800
3112
18924
20496
104707
3745
99345
106497
62626
5667
3280
125200
1697
36480
133
70208
39554
45090
69537
54278
8358
36113
99618
25873
5158
...

result:

ok OK!

Test #4:

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

input:

15
10
0
11
13
2
14
4
1
5
6
8
12
3
7
9

output:

5
0
4
2
13
1
11
14
10
9
7
3
12
8
6

result:

ok OK!

Test #5:

score: 0
Accepted
time: 19ms
memory: 6972kb

input:

3237
9776
12036
8229
2100
10676
17349
26144
2690
30256
3088
27328
31796
3344
54
3637
16908
17030
31749
8593
153
20020
2305
24980
17413
1155
16524
1068
16576
2881
1139
10416
1924
17284
1042
16969
1066
28084
24608
29220
25125
19744
26117
128
28724
4760
17792
27008
17696
4372
6784
19157
8577
405
19072
...

output:

22533
16433
24080
30209
22017
10250
219
121
2053
25508
277
513
25285
4808
28672
10448
10561
560
19012
1122
12289
250
3616
11056
572
15920
10960
6712
24756
2184
17220
123
11312
6693
11652
24785
512
7701
3472
7184
540
2512
1136
3585
1123
14848
597
10900
28320
341
8480
16476
27200
9524
16532
8533
913
3...

result:

ok OK!

Test #6:

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

input:

32
21
10
13
29
15
30
14
0
26
19
18
2
8
25
5
23
17
12
24
3
4
22
20
27
6
9
1
28
7
16
11
31

output:

10
21
18
2
16
1
17
31
5
12
13
29
23
6
26
8
14
19
7
28
27
9
11
4
25
22
30
3
24
15
20
0

result:

ok OK!

Test #7:

score: 0
Accepted
time: 2ms
memory: 4208kb

input:

286
304
63
445
257
143
170
407
68
55
44
256
53
176
310
4
436
356
33
6
442
160
38
314
273
296
420
299
173
64
408
0
401
169
423
40
284
135
187
358
397
301
70
260
393
190
174
36
428
65
183
421
21
390
58
28
73
288
434
403
104
10
405
443
168
46
43
171
47
398
311
185
279
413
15
277
23
19
20
42
261
278
139...

output:

143
384
2
120
304
277
40
290
392
403
96
394
271
137
443
11
155
414
441
5
287
89
133
174
151
27
148
274
294
39
447
46
80
24
407
163
312
324
153
50
146
313
98
54
65
273
411
19
190
264
26
426
57
389
419
438
159
13
44
279
437
42
4
81
401
404
276
400
49
136
326
104
34
432
170
424
428
427
405
186
105
308
...

result:

ok OK!

Test #8:

score: 0
Accepted
time: 2ms
memory: 4256kb

input:

260
261
790
778
536
273
7
28
19
840
12
3
527
75
4
599
795
336
543
793
82
850
286
852
2
848
539
841
587
847
326
535
515
519
837
86
78
322
271
525
80
785
22
596
523
794
95
81
339
70
798
590
67
333
69
834
284
21
540
30
72
789
581
514
8
26
27
11
1024
594
770
257
348
279
861
331
73
600
264
277
577
6
345
...

output:

602
73
85
327
590
856
835
844
23
851
860
336
788
859
264
68
527
320
70
781
13
577
11
861
15
324
22
276
16
537
328
348
344
26
777
785
541
592
338
783
78
841
267
340
69
768
782
524
793
65
273
796
530
794
29
579
842
323
833
791
74
282
349
855
837
836
852
863
269
93
606
515
584
2
532
790
263
599
586
286...

result:

ok OK!

Test #9:

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

input:

128
240
194
178
243
2
131
163
32
112
225
153
129
97
82
25
158
140
144
134
66
69
65
98
24
13
26
192
157
160
3
49
211
196
6
133
14
33
5
12
139
99
176
28
179
83
138
11
150
19
155
224
137
208
15
4
154
113
143
147
135
18
81
34
149
73
136
23
76
209
30
197
146
27
17
80
48
227
145
168
152
68
0
50
1
51
29
20...

output:

15
29
65
0
241
40
80
159
143
18
6
114
158
161
134
97
83
99
25
157
146
178
145
135
210
197
51
66
77
168
142
12
9
153
72
177
204
154
211
20
144
67
227
76
140
21
148
73
200
68
31
22
42
240
201
5
130
112
96
24
225
162
209
10
150
23
136
179
34
193
26
69
132
226
163
195
28
98
3
7
155
243
205
242
192
194
1...

result:

ok OK!

Test #10:

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

input:

24
2
12
28
5
26
3
24
10
8
7
22
17
1
6
16
20
19
0
18
11
4
9
25
27

output:

25
18
3
10
1
28
7
5
19
24
9
6
26
17
0
11
8
16
12
20
27
22
2
4

result:

ok OK!

Test #11:

score: 0
Accepted
time: 10ms
memory: 5320kb

input:

1572
2144
58
3077
672
2376
2112
3978
1879
1170
557
2817
851
3975
2346
1814
1294
24
2602
1610
3457
606
1875
2818
2629
864
2156
1350
178
30
674
1547
2668
2948
1864
2432
2178
1310
176
2317
658
1057
587
2152
256
2927
1069
1282
1682
440
2208
2096
2850
1213
3076
3599
2607
1574
849
657
1188
578
676
1161
11...

output:

156
3205
858
1375
1559
1823
5
2088
2893
2370
1206
1164
8
581
105
2657
2151
1365
2341
526
1185
2060
1117
170
31
1923
537
3588
961
2125
2404
275
1081
23
625
120
705
2630
1618
1357
862
2340
660
2656
16
834
605
2408
1607
1887
1871
1101
2626
859
384
1360
2192
46
1358
792
2100
3083
2918
785
624
2913
900
2...

result:

ok OK!

Test #12:

score: 0
Accepted
time: 3ms
memory: 4044kb

input:

494
410
96
93
915
349
71
374
344
537
649
146
962
132
19
78
141
162
103
101
272
263
2
367
615
544
787
898
368
70
994
15
185
355
594
113
80
61
326
60
576
200
612
385
586
154
5
657
520
319
528
58
271
194
274
290
377
369
9
769
362
125
614
50
102
651
393
74
371
810
682
375
519
583
98
64
119
387
424
391
3...

output:

613
906
290
104
162
680
649
39
358
374
365
61
379
936
305
274
349
664
514
111
640
381
528
280
351
108
25
15
185
29
368
70
28
301
270
938
962
57
323
319
562
411
126
416
609
610
362
482
576
367
325
112
313
141
93
134
14
390
204
657
258
257
461
793
372
118
928
140
85
273
8
400
312
285
551
904
536
87
12...

result:

ok OK!

Test #13:

score: 0
Accepted
time: 2359ms
memory: 126256kb

input:

199969
8669248
1075841048
201328650
44042242
577154
1477480448
75844
406986886
1209534848
37758482
402981064
8462848
67126848
36160
35783200
268500996
25297024
203492360
138412736
1243643904
180232
570441730
272732160
67568128
52564512
570886432
34016
1225073920
536940936
1074372864
4556832
26850128...

output:

4269088
109117952
6295940
88080424
1076302080
100933648
33842
17826056
2135072
16959500
34078978
1145209888
1710464
411062274
71336978
1610786880
4984836
1610645664
67114032
831660032
407110658
335546512
738347008
33581058
4817920
204472832
2904320
1051140
18112514
134372864
1184512
218388488
800194...

result:

ok OK!

Test #14:

score: 0
Accepted
time: 2356ms
memory: 121180kb

input:

190281
53740576
202441232
536983640
1145053184
202703424
706479124
537213456
135726400
322181124
369160232
264208
16875750
536984090
604439104
254017728
538217476
672404500
12716036
1075089440
401830
310411820
1357398048
201721088
151389008
67162128
302098580
385933344
310487132
134481938
1144115456...

output:

1879087108
6337792
402915842
137483536
805353498
4329992
402686026
536871452
1610646560
8456916
205632768
4596480
402915392
152044848
538052144
1394610208
38404616
539038514
857738244
21070400
75984
537930368
1079111696
605094944
1215374592
8389224
8393804
1611661984
805417544
138421264
537071648
13...

result:

ok OK!

Test #15:

score: 0
Accepted
time: 2328ms
memory: 126212kb

input:

199998
344064132
2066
301989920
83886244
1744994560
84017920
704909320
1090847234
1354825984
19407360
42205408
436469796
67963392
34621480
35652096
100673568
34734336
285356032
136316320
536912388
50667520
9199616
2099392
2621792
285220880
1182088
1581074
50320
17111168
67747856
20987920
672661780
1...

output:

167772722
1476396580
1157628036
681574410
386146816
35919936
4210944
541065540
136855556
9472260
1142949912
1075839106
37929984
541204546
274268162
1074839616
17139200
202424320
1073777232
134431746
546471936
560009216
68158000
4341912
1207961088
557604
263560
5378050
188480
538316832
547881088
1073...

result:

ok OK!

Test #16:

score: 0
Accepted
time: 1619ms
memory: 47256kb

input:

199984
4402408632320
9034687045437440
18155138279542816
2269533733650432
9077568067863552
45176733762093056
4503668347109380
68719501312
563500280252416
10133374039506944
567382359670784
4329570308
144255925568405504
848827271610432
288233124932880384
162411061562179648
108086700294537232
2199137340...

output:

562949954535432
38104950898690
288234775276158984
140774005014528
17596499886080
19175482788553216
2251804343533570
108086391056924720
68736254480
4785212118532096
355305464528896
2252624464183312
72092812770804288
70368744767620
4503878804439296
85900394504
18014415722905604
8881992368208
68681732
...

result:

ok OK!

Test #17:

score: 0
Accepted
time: 1604ms
memory: 32448kb

input:

175134
108086408238334020
144115773533585824
72058968499306884
2533755843543040
146828920228937728
9007199254873088
218459768464475136
585474548627931136
281492160856100
2432326030065664
1460168630026244
2286997087993924
657811695644704776
146649631097389056
594479548859424768
2287544695799808
36029...

output:

9592173800460296
576465150383572992
36591747375038464
144296607628657152
1443243262464
432416002299400592
1099520278672
108368143092563976
1178676741800960
144398037442134528
272630816
9148488646656000
36030996075790336
180732374811136
72057595783351560
9147941038850116
72620819339559040
21620796863...

result:

ok OK!

Test #18:

score: 0
Accepted
time: 1841ms
memory: 60804kb

input:

198623
17188785152
687750512640
70403108110912
4471062004740
8590526656
35184372097280
1125901047694464
105561706332160
2201206521856
4399205466112
140737926660112
2815377939628040
309287979136
211123412402176
166912
422212465131688
569547159506984
1161153003683904
3377699787702272
79440788857120
70...

output:

4398050705576
4400194126856
36297054885888
2185232448
4398851818024
79440823451688
17695407865872
1104092862464
70373043364224
35253091640324
8830519889920
6597137039394
536944672
2260598223015938
8796102787080
582749752658180
281474980905024
1133873463312
88315269636
35184406691848
1666455699592
67...

result:

ok OK!

Test #19:

score: 0
Accepted
time: 1836ms
memory: 76788kb

input:

199906
137438955040
23090817991168
139787763728
22541064208400
1236950606384
71468256591872
1099516354560
134480416
4400261120514
6597069864960
84021504
68720590856
2203318239234
8615116800
17729910226944
68753162498
9668003908
137440596000
35193029263360
6597069767756
27487808618626
79182017075232
...

output:

275280642056
214756754464
71760317777928
12781568
1073875008
4673092190208
5100339200
137438982160
2749852811280
1142528426016
8865887338560
17593394003984
9139708235776
429765165120
106102872145920
4296278048
70368886785544
2199023313932
17592454547584
34493956112
70368882590464
1610620944
22677427...

result:

ok OK!