QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#142695 | #5280. Depot Rearrangement | penguinman | 100 ✓ | 182ms | 37140kb | C++17 | 2.7kb | 2023-08-19 18:02:10 | 2023-08-19 18:02:12 |
Judging History
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!