QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#116095#5280. Depot Rearrangementzhouhuanyi#100 ✓66ms29444kbC++111.7kb2023-06-28 09:28:032024-05-31 14:20:32

Judging History

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

  • [2024-05-31 14:20:32]
  • 评测
  • 测评结果:100
  • 用时:66ms
  • 内存:29444kb
  • [2023-08-10 23:21:45]
  • System Update: QOJ starts to keep a history of the judgings of all the submissions.
  • [2023-06-28 09:28:03]
  • 提交

answer

#include<iostream>
#include<cstdio>
#include<vector>
#include<algorithm>
#include<cassert>
#define N 800
using namespace std;
int read()
{
    char c=0;
    int sum=0;
    while (c<'0'||c>'9') c=getchar();
    while ('0'<=c&&c<='9') sum=sum*10+c-'0',c=getchar();
    return sum;
}
struct reads
{
    int num,data;
};
struct node
{
    int x,y;
};
node st[N*N+1];
int n,m,leng,lengths,res,a[N*N+1],cnt[N+1],cur[N+1],tong[N*N+1],length;
vector<reads>E[N+1];
bool used[N*N+1];
void add(int x,int y)
{
    ++leng,E[x].push_back((reads){y,leng});
    return;
}
void adder(int x,int y)
{
    st[++lengths]=(node){x,y},swap(a[x],a[y]);
    return;
}
void dfs(int x)
{
    for (int &i=cur[x];i<E[x].size();++i)
	if (!used[E[x][i].data])
	    used[E[x][i].data]=1,dfs(E[x][i].num),tong[++length]=x;
    return;
}
int main()
{
    int x,rt;
    vector<int>A;
    vector<int>B;
    n=read(),m=read();
    for (int i=1;i<=n*m;++i) a[i]=read();
    for (int i=1;i<=m;++i)
    {
	A.clear(),B.clear();
	for (int j=1;j<=n;++j) cnt[j]=0;
	for (int j=1;j<=n*m;++j)
	    if (a[j]==i)
		cnt[(j-1)/m+1]++;
	for (int j=1;j<=n;++j)
	{
	    if (cnt[j]>1)
	    {
		for (int k=1;k<=cnt[j]-1;++k) add(j,n+i);
	    }
	    else if (!cnt[j]) add(n+i,j);
	}
    }
    for (int i=1;i<=n;++i)
    {
	length=0,dfs(i);
	if (length)
	{
	    reverse(tong+1,tong+length+1),rt=n*m+1;
	    for (int i=length-1;i>=1;i-=2)
	    {
		x=0;
		for (int j=(tong[i]-1)*m+1;j<=tong[i]*m;++j)
		    if (a[j]==tong[i+1]-n)
			x=j;
		adder(x,rt),rt=x;
	    }
	    adder(n*m+1,rt);
	}
    }
    printf("%d\n",lengths);
    for (int i=1;i<=lengths;++i) printf("%d %d\n",st[i].x,st[i].y);
    return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

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

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: 8144kb

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
20 21
12 20
19 12
8 19
15 8
7 15
18 7
4 18
14 4
3 14
10 3
2 10
21 2

result:

ok both subtasks are correct!

Test #3:

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

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
89 101
27 89
100 27
58 100
79 58
50 79
95 50
55 95
44 55
26 44
87 26
97 87
66 97
76 66
36 76
67 36
56 67
28 56
90 28
30 90
16 30
43 16
75 43
49 75
39 49
20 39
3 20
18 3
38 18
29 38
6 29
101 6

result:

ok both subtasks are correct!

Test #4:

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

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: 0ms
memory: 9992kb

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
16173 20001
16836 16173
6330 16836
17229 6330
15566 17229
16366 15566
18966 16366
7068 18966
17774 7068
9994 17774
18899 9994
19184 18899
19682 19184
4482 19682
18968 4482
18781 18968
10381 18781
18466 10381
18091 18466
18491 18091
10488 18491
18488 10488
2866 18488
17266 2866
19529 17266
12730 ...

result:

ok both subtasks are correct!

Test #6:

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

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
3874 4021
4015 3874
3994 4015
4020 3994
3992 4020
3932 3992
3977 3932
3914 3977
3966 3914
3940 3966
3913 3940
4000 3913
3832 4000
3898 3832
3910 3898
3957 3910
3798 3957
3908 3798
3999 3908
3980 3999
3835 3980
3794 3835
3979 3794
3749 3979
3936 3749
3872 3936
3758 3872
3790 3758
3731 3790
3774 ...

result:

ok both subtasks are correct!

Test #7:

score: 5
Accepted
time: 19ms
memory: 10260kb

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
72662 90001
75733 72662
37143 75733
87877 37143
84877 87877
35684 84877
60545 35684
87208 60545
88791 87208
5865 88791
40307 5865
69710 40307
15410 69710
49695 15410
15495 49695
5807 15495
16382 5807
22382 16382
80196 22382
22296 80196
88665 22296
19994 88665
79980 19994
66480 79980
81409 66480
...

result:

ok both subtasks are correct!

Test #8:

score: 5
Accepted
time: 0ms
memory: 10020kb

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
12040 12041
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 11320
11280 ...

result:

ok both subtasks are correct!

Test #9:

score: 5
Accepted
time: 4ms
memory: 10340kb

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
39699 40001
39983 39699
39588 39983
39958 39588
39631 39958
39368 39631
39799 39368
39278 39799
39952 39278
39173 39952
39476 39173
39293 39476
38966 39293
39797 38966
39587 39797
39626 39587
38565 39626
39934 38565
39459 39934
39022 39459
39988 39022
39046 39988
39867 39046
39037 39867
39775 ...

result:

ok both subtasks are correct!

Test #10:

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

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
5423 6401
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 4140
5907 ...

result:

ok both subtasks are correct!

Test #11:

score: 5
Accepted
time: 4ms
memory: 12160kb

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
39795 40001
39873 39795
39724 39873
39936 39724
39657 39936
39995 39657
39776 39995
39665 39776
39956 39665
39774 39956
39994 39774
39566 39994
39659 39566
39266 39659
39639 39266
39992 39639
39390 39992
39551 39390
38947 39551
39537 38947
38588 39537
39519 38588
39984 39519
39656 39984
39368 ...

result:

ok both subtasks are correct!

Test #12:

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

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
6020 6021
5700 6020
5980 5700
5680 5980
5960 5680
5660 5960
5938 5660
5640 5938
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: 22ms
memory: 15048kb

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
89593 90001
89398 89593
89986 89398
88738 89986
89998 88738
89694 89998
86694 89694
89691 86694
89912 89691
89370 89912
87894 89370
88198 87894
88785 88198
89562 88785
88035 89562
89492 88035
89080 89492
89663 89080
88775 89663
86697 88775
89254 86697
88628 89254
88478 88628
89622 88478
89906 ...

result:

ok both subtasks are correct!

Test #14:

score: 5
Accepted
time: 46ms
memory: 19712kb

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
80400 80401
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 77999
78398 ...

result:

ok both subtasks are correct!

Test #15:

score: 5
Accepted
time: 41ms
memory: 9928kb

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
118784 160001
784 118784
160001 784
147572 160001
133420 147572
87336 133420
132109 87336
148555 132109
134930 148555
126916 134930
143716 126916
110130 143716
119755 110130
53963 119755
117163 53963
139563 117163
138000 139563
152588 138000
133788 152588
34188 133788
83080 34188
34280 83080
103...

result:

ok both subtasks are correct!

Test #16:

score: 5
Accepted
time: 17ms
memory: 13428kb

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
56994 60201
58368 56994
59793 58368
59577 59793
59788 59577
60185 59788
58974 60185
59772 58974
58776 59772
59391 58776
59979 59391
58273 59979
58972 58273
58181 58972
58962 58181
57185 58962
59159 57185
56573 59159
59761 56573
58379 59761
59365 58379
56040 59365
58177 56040
59190 58177
58370 ...

result:

ok both subtasks are correct!

Test #17:

score: 5
Accepted
time: 42ms
memory: 22064kb

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
80400 80401
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 77200
76800 ...

result:

ok both subtasks are correct!

Test #18:

score: 5
Accepted
time: 41ms
memory: 16432kb

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
118794 120001
118345 118794
119001 118345
116043 119001
117862 116043
118795 117862
118197 118795
119654 118197
118491 119654
114597 118491
117284 114597
113700 117284
117168 113700
116376 117168
119982 116376
117294 119982
113293 117294
115798 113293
116951 115798
116334 116951
112499 116334
...

result:

ok both subtasks are correct!

Test #19:

score: 5
Accepted
time: 66ms
memory: 29444kb

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
132867 132868
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
132463 130073...

result:

ok both subtasks are correct!

Test #20:

score: 5
Accepted
time: 50ms
memory: 18964kb

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
153428 160001
159158 153428
160000 159158
157793 160000
158798 157793
159997 158798
158393 159997
158794 158393
158199 158794
159518 158199
155595 159518
156224 155595
158598 156224
154800 158598
159594 154800
155146 159594
156577 155146
159024 156577
159991 159024
156392 159991
155998 156392
...

result:

ok both subtasks are correct!