#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N=1e5+5;
int cnt[N];
signed main() {
ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
int n,s,t; cin >> n >> s >> t;
vector<vector<int>> v(n,vector<int>(s));
int i,j;
map<pair<int,int>,int> mp; // [color,row]
vector<set<int>> st(t+1);
for (i=0;i<n;++i) {
for (auto&it:v[i]) {
cin >> it;
++cnt[it];
++mp[{it,i}],st[it].insert(i);
} sort(v[i].begin(),v[i].end());
}
vector<int> v1,v2; // v1 = norms , v2 = remainders
for (i=1;i<=t;++i) {
for (j=0;j<(cnt[i]/s);++j)
v1.emplace_back(i);
for (j=0;j<(cnt[i]%s);++j)
v2.emplace_back(i);
} int ans[n][s];
for (i=0;i<s;++i) {
set<int> ss;
for (j=0;j<n;++j) ss.insert(j);
if (v2.size()) {
int it=*st[v2[i]].begin();
int a = --mp[{v2[i],it}];
if (a==0) st[v2[i]].erase(it);
ans[it][i]=v2[i]; ss.erase(it);
}
for (auto&it:v1) {
int a,id;
for (auto&k:st[it]) {
if (ss.count(k)) {
a = --mp[{it,k}],id=k;
ss.erase(k); ans[k][i]=it;
}
}
if (a==0) st[it].erase(id);
}
}
for (i=0;i<n;++i) {
for (j=0;j<s;++j)
cout << ans[i][j] << ' ';
cout << '\n';
}
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |