Skip to content

Commit da714f3

Browse files
Create G037-D.cpp
1 parent 950511a commit da714f3

File tree

1 file changed

+57
-0
lines changed

1 file changed

+57
-0
lines changed

AtCoder/G037-D.cpp

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
#include <bits/stdc++.h>
2+
using namespace std;
3+
4+
const int mxN=100;
5+
int n, m, mt[mxN];
6+
array<int, 2> a[mxN][mxN];
7+
vector<array<int, 2>> adj[mxN];
8+
bool vis[mxN];
9+
10+
bool dfs(int u1) {
11+
if(!vis[u1]) {
12+
vis[u1]=1;
13+
for(array<int, 2> u2 : adj[u1]) {
14+
if(mt[u2[0]]<0||dfs(a[u2[0]][mt[u2[0]]][0])) {
15+
mt[u2[0]]=u2[1];
16+
return 1;
17+
}
18+
}
19+
}
20+
return 0;
21+
}
22+
23+
int main() {
24+
ios::sync_with_stdio(0);
25+
cin.tie(0);
26+
27+
cin >> n >> m;
28+
for(int i=0; i<n; ++i)
29+
for(int j=0; j<m; ++j)
30+
cin >> a[i][j][1], a[i][j][0]=(a[i][j][1]-1)/m;
31+
for(int i=0; i<m; ++i) {
32+
for(int j=i; j<m; ++j)
33+
for(int k=0; k<n; ++k)
34+
adj[a[k][j][0]].push_back({k, j});
35+
memset(mt, -1, 4*n);
36+
for(int j=0; j<n; ++j) {
37+
memset(vis, 0, n);
38+
dfs(j);
39+
}
40+
for(int j=0; j<n; ++j) {
41+
swap(a[j][mt[j]], a[j][i]);
42+
adj[j].clear();
43+
}
44+
}
45+
for(int k : {0, 1}) {
46+
for(int i=0; i<n; ++i) {
47+
for(int j=0; j<m; ++j)
48+
cout << a[i][j][1] << " ";
49+
cout << "\n";
50+
}
51+
for(int i=0; i<m; ++i)
52+
for(int j=0; j<n-1; ++j)
53+
for(int k=0; k<n-1; ++k)
54+
if(a[k][i][0]>a[k+1][i][0])
55+
swap(a[k][i], a[k+1][i]);
56+
}
57+
}

0 commit comments

Comments
 (0)