QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#142695#5280. Depot Rearrangementpenguinman100 ✓182ms37140kbC++172.7kb2023-08-19 18:02:102023-08-19 18:02:12

Judging History

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

  • [2023-08-19 18:02:12]
  • 评测
  • 测评结果:100
  • 用时:182ms
  • 内存:37140kb
  • [2023-08-19 18:02:10]
  • 提交

answer

#include <bits/stdc++.h>

using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::vector;
using ll = long long;
using vi = vector<ll>;
using vii = vector<vi>;
using pii = std::pair<ll,ll>;

#define rep(i,j,k) for(ll i=ll(j); i<ll(k); i++)
#define REP(i,j,k) for(ll i=ll(j); i<=ll(k); i++)
#define per(i,j,k) for(ll i=ll(j); i>=ll(k); i--)
#define ln "\n"
#define all(a) a.begin(),a.end()
#define pb emplace_back
#define mp std::make_pair
#define mtp std::make_tuple

int main(){
    cin.tie(nullptr);
    std::ios::sync_with_stdio(false);

    ll N,M; cin >> N >> M;
    vector<vii> data(N,vii(M));
    vi A(N*M);
    rep(i,0,N*M){
        cin >> A[i];
        A[i]--;
        data[i/M][A[i]].pb(i);
    }
    vii edge(N+M), weight(N+M);
    {
        ll cnt = N*M;
        rep(i,0,N){
            rep(j,0,M){
                if(data[i][j].size() == 0){
                    edge[j].pb(M+i);
                    weight[j].pb(cnt++);
                }
                else{
                    rep(k,1,data[i][j].size()){
                        edge[M+i].pb(j);
                        weight[M+i].pb(data[i][j][k]);
                    }
                }
            }
        }
    }
    ll ans = 0;
    {
        vector<bool> flag(N+M);
        rep(i,0,N+M){
            if(edge[i].empty()) continue;
            if(flag[i]) continue;
            flag[i] = true;
            std::queue<ll> que;
            que.push(i);
            ll sum = 0;
            while(!que.empty()){
                ll now = que.front();
                que.pop();
                sum += edge[now].size();
                for(auto next: edge[now]){
                    if(flag[next]) continue;
                    flag[next] = true;
                    que.push(next);
                }
            }
            sum /= 2;
            ans += sum+1;
        }
        cout << ans << ln;
    }
    
    vector<bool> used(N*M*2);

    vi ord;

    std::function<void(ll, ll)> dfs = [&](ll ID, ll now){
        rep(i,0,edge[now].size()){
            ll next = edge[now][i];
            ll idx = weight[now][i];
            if(used[idx]) continue;
            used[idx] = true;
            dfs(idx, next);
        }
        if(ID != -1) ord.pb(ID);
    };

    rep(i,0,N+M){
        dfs(-1, i);
        {
            vi nord;
            for(auto el: ord){
                if(el < N*M) nord.pb(el);
            }
            ord = nord;
        }
        if(ord.empty()) continue;
        cout << ord[0]+1 << " " << N*M+1 << ln;
        rep(j,1,ord.size()) cout << ord[j]+1 << " "<< ord[j-1]+1 << ln;
        cout << N*M+1 << " " << ord.back()+1 << ln;
        ord.clear();
    }
}

详细

Test #1:

score: 5
Accepted
time: 1ms
memory: 3476kb

input:

10 3
1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3


output:

0

result:

ok both subtasks are correct!

Test #2:

score: 5
Accepted
time: 1ms
memory: 3472kb

input:

5 4
1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 4 4 4 4 4


output:

13
4 21
20 4
12 20
19 12
8 19
15 8
7 15
18 7
3 18
14 3
2 14
10 2
21 10

result:

ok both subtasks are correct!

Test #3:

score: 5
Accepted
time: 1ms
memory: 3468kb

input:

10 10
8 10 10 3 7 3 5 6 1 4 3 8 2 9 1 8 4 2 7 3 10 7 9 2 1 10 10 9 1 2 9 7 4 5 2 9 10 5 7 6 6 8 6 8 4 2 9 1 2 8 6 1 4 2 2 1 5 6 3 10 10 7 9 4 8 9 8 2 5 6 4 3 1 6 3 3 10 7 7 5 3 6 8 5 9 4 6 7 9 4 10 5 3 4 5 1 1 7 8 5


output:

32
97 101
58 97
79 58
50 79
100 50
66 100
76 66
89 76
27 89
95 27
55 95
44 55
26 44
87 26
56 87
36 56
16 36
43 16
20 43
3 20
28 3
90 28
49 90
39 49
75 39
30 75
67 30
29 67
6 29
18 6
38 18
101 38

result:

ok both subtasks are correct!

Test #4:

score: 5
Accepted
time: 1ms
memory: 3576kb

input:

100 10
1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10 9 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10...

output:

19
453 1001
184 453
814 184
949 814
359 949
775 359
670 775
830 670
175 830
210 175
850 210
734 850
713 734
819 713
109 819
1001 109
747 1001
707 747
1001 707

result:

ok both subtasks are correct!

Test #5:

score: 5
Accepted
time: 3ms
memory: 4644kb

input:

200 100
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 ...

output:

195
19529 20001
12730 19529
7953 12730
13453 7953
19380 13453
19298 19380
16885 19298
16173 16885
16836 16173
18846 16836
19184 18846
19682 19184
4482 19682
18968 4482
17266 18968
15566 17266
18781 15566
10381 18781
18466 10381
18091 18466
18491 18091
10488 18491
18488 10488
2866 18488
16366 2866
18...

result:

ok both subtasks are correct!

Test #6:

score: 5
Accepted
time: 2ms
memory: 4172kb

input:

201 20
20 18 5 5 1 7 8 17 12 10 20 12 13 19 16 2 9 8 20 20 19 10 17 20 9 11 15 17 9 2 3 4 17 10 7 20 7 19 17 11 20 2 1 13 11 9 11 6 10 8 11 3 2 16 9 15 16 12 13 6 5 13 4 13 3 8 20 18 10 3 14 1 11 20 17 17 2 11 20 1 4 10 3 3 9 13 7 10 19 16 14 16 9 19 14 15 12 9 20 12 2 19 18 2 7 7 2 12 10 8 20 18 16...

output:

1401
3935 4021
3994 3935
4020 3994
3977 4020
4015 3977
3992 4015
3932 3992
3914 3932
4000 3914
3872 4000
3913 3872
3966 3913
3832 3966
3898 3832
3910 3898
3957 3910
3798 3957
3908 3798
3999 3908
3980 3999
3835 3980
3794 3835
3979 3794
3940 3979
3749 3940
3936 3749
3817 3936
3871 3817
3758 3871
3790 ...

result:

ok both subtasks are correct!

Test #7:

score: 5
Accepted
time: 6ms
memory: 8920kb

input:

300 300
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 ...

output:

205
73649 90001
85356 73649
77546 85356
68130 77546
22642 68130
47192 22642
14663 47192
6563 14663
7163 6563
78731 7163
7031 78731
47363 7031
83192 47363
52980 83192
19980 52980
86388 19980
38688 86388
39588 38688
77388 39588
63494 77388
85111 63494
39145 85111
85045 39145
86011 85045
76191 86011
18...

result:

ok both subtasks are correct!

Test #8:

score: 5
Accepted
time: 13ms
memory: 6700kb

input:

301 40
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1...

output:

11624
280 12041
12040 280
11720 12040
12000 11720
11680 12000
11960 11680
11640 11960
11920 11640
11600 11920
11880 11600
11560 11880
11840 11560
11520 11840
11800 11520
11480 11800
12039 11480
11400 12039
11440 11400
11999 11440
11399 11999
11959 11399
11360 11959
11919 11360
11320 11919
11879 1132...

result:

ok both subtasks are correct!

Test #9:

score: 5
Accepted
time: 12ms
memory: 8956kb

input:

400 100
11 65 1 79 15 18 79 46 9 30 71 53 58 55 94 73 39 16 6 91 49 30 23 30 28 81 90 48 97 54 79 30 94 18 42 77 44 36 5 48 55 97 79 36 41 59 79 71 32 59 3 10 63 52 44 41 9 46 31 31 56 87 60 80 12 51 15 78 41 65 95 34 29 83 46 64 37 53 98 17 41 45 36 73 20 53 48 80 57 54 57 72 39 56 98 6 10 78 11 72...

output:

14592
39765 40001
39587 39765
39983 39587
39699 39983
39958 39699
39588 39958
39631 39588
39368 39631
39799 39368
39278 39799
39952 39278
39173 39952
39476 39173
39293 39476
39626 39293
39249 39626
38966 39249
39797 38966
39674 39797
38565 39674
39934 38565
39459 39934
39022 39459
39988 39022
39261 ...

result:

ok both subtasks are correct!

Test #10:

score: 5
Accepted
time: 1ms
memory: 4196kb

input:

40 160
17 2 3 4 5 6 7 91 9 10 154 12 103 14 15 16 17 25 19 58 21 8 23 24 52 26 27 58 120 105 50 55 104 32 35 36 37 38 45 10 41 42 43 44 45 71 47 48 49 34 140 52 53 54 115 44 28 58 59 60 61 62 63 64 132 66 67 68 69 70 71 69 24 74 75 76 77 133 79 80 81 82 100 84 31 86 87 88 100 90 91 92 93 94 95 96 97...

output:

1316
6047 6401
5423 6047
5598 5423
6238 5598
6400 6238
5465 6400
5920 5465
6231 5920
4794 6231
5917 4794
4636 5917
5119 4636
3040 5119
5754 3040
5912 5754
4159 5912
5439 4159
3836 5439
5435 3836
6393 5435
5425 6393
2868 5425
4561 2868
4957 4561
6080 4957
4787 6080
3360 4787
5417 3360
4140 5417
5117 ...

result:

ok both subtasks are correct!

Test #11:

score: 5
Accepted
time: 13ms
memory: 8932kb

input:

400 100
88 82 9 2 90 1 83 32 32 79 8 79 63 67 85 82 50 63 69 2 7 91 21 90 69 3 39 78 66 83 96 53 24 65 56 63 90 54 35 55 94 22 76 12 54 55 5 49 91 73 8 19 64 54 39 23 13 27 34 4 81 52 13 11 36 45 3 50 82 81 42 50 75 15 99 70 29 26 70 66 34 15 42 83 16 19 19 12 76 1 68 49 7 17 64 37 98 34 99 37 34 64...

output:

14611
39755 40001
39936 39755
39657 39936
39995 39657
39795 39995
39873 39795
39390 39873
39899 39390
39724 39899
39665 39724
39956 39665
39776 39956
39994 39776
39566 39994
38947 39566
39551 38947
39659 39551
38588 39659
39537 38588
39266 39537
39639 39266
39992 39639
39656 39992
39180 39656
38354 ...

result:

ok both subtasks are correct!

Test #12:

score: 5
Accepted
time: 2ms
memory: 4824kb

input:

301 20
8 1 1 1 1 1 1 17 1 9 1 5 1 1 1 1 13 1 9 1 18 1 1 16 1 15 5 19 1 8 11 10 1 1 1 1 18 4 1 1 1 1 16 1 1 1 12 10 1 1 1 14 11 13 1 1 1 1 1 1 10 1 1 1 1 1 1 19 14 1 1 1 5 1 1 1 1 13 1 18 1 1 4 1 1 1 1 1 1 1 1 1 1 16 16 10 1 14 18 1 1 1 7 1 1 1 1 6 9 1 13 1 1 1 2 1 1 1 1 1 1 10 1 1 1 17 1 10 10 1 12 ...

output:

4260
5932 6021
5700 5932
6020 5700
5680 6020
5980 5680
5660 5980
5960 5660
5640 5960
5920 5640
5619 5920
5900 5619
5599 5900
5880 5599
5580 5880
5820 5580
5560 5820
5800 5560
5540 5800
5760 5540
5480 5760
6018 5480
5398 6018
5440 5398
6000 5440
5380 6000
5420 5380
5979 5420
5397 5979
5959 5397
5379 ...

result:

ok both subtasks are correct!

Test #13:

score: 5
Accepted
time: 38ms
memory: 15392kb

input:

300 300
215 159 263 206 201 183 286 56 142 10 231 214 34 54 263 250 169 208 239 148 104 22 244 17 74 68 184 52 2 30 42 83 222 106 25 152 37 225 213 213 69 273 91 221 207 48 166 28 221 50 46 64 10 254 207 109 206 144 270 291 195 197 253 235 141 186 102 68 52 24 38 6 181 44 256 200 77 233 285 163 223 ...

output:

32648
89586 90001
89398 89586
89986 89398
88738 89986
88198 88738
88785 88198
89593 88785
87894 89593
89998 87894
89694 89998
89912 89694
89370 89912
86694 89370
89691 86694
88775 89691
89562 88775
89254 89562
88628 89254
86697 88628
88035 86697
89492 88035
89080 89492
89663 89080
89906 89663
87217 ...

result:

ok both subtasks are correct!

Test #14:

score: 5
Accepted
time: 78ms
memory: 22556kb

input:

201 400
1 1 1 1 1 152 1 1 1 1 1 1 1 33 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 300 154 1 1 147 1 1 1 383 186 1 1 90 256 1 1 1 1 1 1 1 63 1 1 1 1 208 1 1 1 1 31 1 1 1 1 1 1 1 127 1 1 29 216 397 393 1 1 1 1 1 1 279 1 1 1 1 55 1 1 215 249 1 1 1 1 1 1 172 1 1 1 1 1 1 1 1 1 1 1 1 349 1 331 1 1 1 1 1 1 1 34...

output:

63990
201 80401
80400 201
79998 80400
79199 79998
79600 79199
78557 79600
79198 78557
80000 79198
78400 80000
79999 78400
80398 79999
78800 80398
79599 78800
78399 79599
79196 78399
80393 79196
78000 80393
79597 78000
79997 79597
78798 79997
80392 78798
79596 80392
78797 79596
77999 78797
79195 7799...

result:

ok both subtasks are correct!

Test #15:

score: 5
Accepted
time: 10ms
memory: 13388kb

input:

400 400
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 ...

output:

217
158790 160001
25190 158790
139991 25190
111191 139991
36591 111191
150726 36591
152386 150726
51864 152386
152264 51864
153866 152264
7538 153866
153938 7538
152266 153938
48786 152266
98581 48786
9377 98581
3377 9377
48581 3377
104326 48581
124654 104326
104254 124654
20726 104254
36726 20726
1...

result:

ok both subtasks are correct!

Test #16:

score: 5
Accepted
time: 20ms
memory: 11956kb

input:

301 200
50 129 146 60 183 51 47 77 26 73 1 45 1 44 149 1 81 196 17 16 163 35 159 71 1 94 161 138 138 27 76 1 102 42 5 186 176 1 111 198 37 63 81 155 95 164 132 135 155 194 126 98 31 34 121 19 175 148 33 105 25 122 91 165 1 69 1 197 12 98 1 155 5 53 42 1 60 98 78 61 155 13 1 171 102 152 95 61 87 200 ...

output:

23506
56598 60201
59793 56598
59577 59793
59788 59577
60185 59788
58974 60185
59772 58974
58776 59772
59391 58776
59979 59391
58368 59979
59159 58368
58273 59159
58972 58273
58181 58972
58962 58181
57185 58962
59761 57185
58379 59761
59365 58379
56040 59365
58177 56040
59190 58177
58370 59190
57843 ...

result:

ok both subtasks are correct!

Test #17:

score: 5
Accepted
time: 127ms
memory: 25100kb

input:

201 400
1 1 1 1 1 1 1 1 1 1 1 1 1 263 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 246 1 1 1 1 1 1 1 1 1 1 1 1 1 1 107 1 1 1 1 1 1 1 1 57 1 1 1 1 1 1 1 224 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 90 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

output:

77869
201 80401
80400 201
79600 80400
78800 79600
79599 78800
80000 79599
80399 80000
78400 80399
79598 78400
80397 79598
79998 80397
78399 79998
78799 78399
80396 78799
79596 80396
79997 79596
79595 79997
78398 79595
80395 78398
78000 80395
80394 78000
77600 80394
80393 77600
77200 80393
80392 7720...

result:

ok both subtasks are correct!

Test #18:

score: 5
Accepted
time: 48ms
memory: 20140kb

input:

400 300
75 26 289 176 131 196 124 8 230 157 247 265 13 2 210 141 17 200 187 83 21 22 118 144 232 26 284 75 48 30 132 32 65 34 72 36 73 286 164 40 41 261 65 270 221 12 139 48 49 143 91 39 17 258 275 56 151 194 282 55 228 266 296 64 22 232 67 142 69 152 10 102 109 45 75 49 283 112 78 283 81 236 169 22...

output:

43105
119581 120001
118491 119581
119001 118491
116043 119001
117862 116043
118795 117862
119982 118795
118794 119982
118197 118794
118345 118197
114597 118345
117284 114597
113700 117284
117168 113700
116376 117168
119654 116376
117294 119654
113293 117294
115798 113293
116951 115798
116334 116951
...

result:

ok both subtasks are correct!

Test #19:

score: 5
Accepted
time: 182ms
memory: 37140kb

input:

333 399
1 1 1 1 1 1 1 28 1 1 1 1 1 1 161 1 17 1 1 1 1 262 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 43 1 1 1 1 1 70 1 1 1 142 1 1 1 1 1 1 1 1 1 1 1 1 70 1 1 1 1 1 1 278 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 245 1 1 1 1 1 1 33 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 106 1 1 1 1 268 1 1 1 172 1 1 1 1 1 312 1 286 1 1 1 1 ...

output:

114795
333 132868
132867 333
131670 132867
132468 131670
132865 132468
132067 132865
132864 132067
131271 132864
132467 131271
131669 132467
132862 131669
130872 132862
132466 130872
130473 132466
132464 130473
131270 132464
131667 131270
132066 131667
131269 132066
132861 131269
130073 132861
13246...

result:

ok both subtasks are correct!

Test #20:

score: 5
Accepted
time: 61ms
memory: 25628kb

input:

400 400
100 35 353 385 317 228 7 148 113 165 11 306 209 89 21 166 17 2 19 249 27 305 377 22 3 353 38 28 29 96 191 32 33 309 35 308 100 176 152 40 176 42 43 86 45 46 96 48 396 381 218 246 53 54 334 159 243 360 294 60 33 62 185 64 65 66 191 121 351 107 10 343 367 74 75 201 77 247 79 134 304 92 42 126 ...

output:

55816
158345 160001
158794 158345
157793 158794
159158 157793
160000 159158
156577 160000
158798 156577
159997 158798
158393 159997
159518 158393
155595 159518
156224 155595
159024 156224
159991 159024
156392 159991
159594 156392
155146 159594
154800 155146
155594 154800
155998 155594
155112 155998
...

result:

ok both subtasks are correct!