Submission #1153638

#TimeUsernameProblemLanguageResultExecution timeMemory
1153638MighilonBrought Down the Grading Server? (CEOI23_balance)C++20
0 / 100
504 ms1114112 KiB
#include <bits/stdc++.h> using namespace std; #ifdef DEBUG #include "../Library/debug.h" #else #define dbg(x...) #endif typedef long long ll; typedef long double ld; typedef pair<int, int> pi; typedef pair<ll, ll> pl; typedef vector<int> vi; typedef vector<bool> vb; typedef vector<ll> vl; typedef vector<pi> vpi; typedef vector<pl> vpl; #define FOR(i, a, b) for (int i = (a); i < (b); ++i) #define F0R(i, a) for (int i = 0; i < (a); ++i) #define FORd(i, a, b) for (int i = (b) - 1; i >= (a); --i) #define F0Rd(i, a) for (int i = (a) - 1; i >= 0; --i) #define trav(a, x) for (auto& a : x) #define f first #define s second #define pb push_back #define sz(x) (int)(x).size() #define all(x) x.begin(), x.end() const char nl = '\n'; const int INF = 1e9; // const ll MOD = 1e9 + 7; const ll MOD=998244353; void solve(){ int n,s,t; cin>>n>>s>>t; // if(s!=2)return; vector<vi> a(n,vi(s)); F0R(i,n)F0R(j,s)cin>>a[i][j]; int l=0; F0R(i,n)l=max(l,*max_element(all(a[i]))); vpi cnt(l+1); vi r(l+1); // reverse F0R(i,l+1)cnt[i]={0,i}; dbg(l) F0R(i,n)F0R(j,s){ int k=cnt[a[i][j]].s; assert(cnt[k].f<s); cnt[k].f++; if(cnt[k].f==s){ cnt.pb({0,l+1}); r.pb(0); cnt[a[i][j]].s=++l; } r[k]=a[i][j]; a[i][j]=k; } dbg(a); vector<vpi> adj(n+l+3); vector<vi> c(n+l+3,vi(n+l+3)); int so=n+l+1,si=n+l+2; F0R(i,n)F0R(j,s){ // adj[so].pb({i,-1}); adj[i].pb({s+a[i][j],i*s+j}); adj[s+a[i][j]].pb({i,-1}); c[i][s+a[i][j]]=1; // adj[s+a[i][j]].pb({si,-1}); } F0R(i,n) adj[so].pb({i,-1}); F0R(i,l) adj[s+i+1].pb({si,-1}); dbg(so,si) // { // F0R(i,sz(adj)){ // trav(j,adj[i]){ // cout<<i<<" "<<j.f<<nl; // } // } // } dbg(adj) vector<vi> b(n,vi(s)),ans(n,vi(s)); vector<vb> vis(n,vb(s)); F0R(i,s){ F0R(j,n) c[so][j]=1,c[j][so]=0; F0R(j,l) c[s+j+1][si]=1,c[si][s+j+1]=0; // { // F0R(i,sz(adj)){ // trav(j,adj[i]){ // cout<<i<<" "<<j.f<<nl; // } // } // } vpi p(sz(adj),{-1,-1}); auto reach=[&]()->bool{ queue<int> q; q.push(so); while(!q.empty()){ int v=q.front(); q.pop(); F0R(j,sz(adj[v])){ pi u=adj[v][j]; int w=c[v][u.f]; if(w<=0||p[u.f].f!=-1)continue; p[u.f]={v,j}; q.push(u.f); } } return ~p[si].f; }; vpi ids; while(reach()){ int v=si; while(v!=so){ if(~adj[p[v].f][p[v].s].s){ ids.pb(p[v]); break; } v=p[v].f; } v=si; while(v!=so){ c[p[v].f][v]--; c[v][p[v].f]++; v=p[v].f; } fill(all(p),pi{-1,-1}); } // { // F0R(i,sz(c)){ // F0R(j,sz(c[i])){ // if(c[i][j]){ // cout<<i<<" "<<j<<nl; // } // } // } // } assert(sz(ids)==n); trav(j,ids){ int u=adj[j.f][j.s].f; int x=adj[j.f][j.s].s; b[x/s][i]=r[a[x/s][x%s]]; // erase F0R(k,sz(adj[u])){ if(adj[u][k].f==j.f){ adj[u].erase(adj[u].begin()+k); break; } } adj[j.f].erase(adj[j.f].begin()+j.s); } } F0R(i,n){ F0R(j,s){ cout<<b[i][j]<<" \n"[j==s-1]; } } } int32_t main(){ ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int TC = 1; // cin >> TC; while(TC--){ solve(); } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...