Submission #1256489

#TimeUsernameProblemLanguageResultExecution timeMemory
1256489Zbyszek99Brought Down the Grading Server? (CEOI23_balance)C++20
100 / 100
1271 ms184860 KiB
#include <bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> #define ll long long #define ld long double #define ull unsigned long long #define ff first #define ss second #define pii pair<int,int> #define pll pair<long long, long long> #define vi vector<int> #define vl vector<long long> #define pb push_back #define rep(i, b) for(int i = 0; i < (b); ++i) #define rep2(i,a,b) for(int i = a; i <= (b); ++i) #define rep3(i,a,b,c) for(int i = a; i <= (b); i+=c) #define count_bits(x) __builtin_popcountll((x)) #define all(x) (x).begin(),(x).end() #define siz(x) (int)(x).size() #define forall(it,x) for(auto& it:(x)) using namespace __gnu_pbds; using namespace std; typedef tree<int, null_type, less<int>, rb_tree_tag,tree_order_statistics_node_update> ordered_set; //mt19937 mt;void random_start(){mt.seed(chrono::time_point_cast<chrono::milliseconds>(chrono::high_resolution_clock::now()).time_since_epoch().count());} //ll los(ll a, ll b) {return a + (mt() % (b-a+1));} const int INF = 1e9+50; const ll INF_L = 1e18+40; const ll MOD = 1e9+7; int n,s,t; vector<vi> ans; vector<pii> graph[2000001]; bool odw[2000001]; bool vert_odw[2000001]; int last[2000001]; int pop_iter = 1; vi cycle; void dfs(int v) { vert_odw[v] = 1; while(!graph[v].empty()) { pii t = graph[v].back(); graph[v].pop_back(); if(odw[t.ss]) continue; odw[t.ss] = 1; dfs(t.ff); } cycle.pb(v); } void solve(int l, int r, vector<vi> c) { pop_iter++; if(l == r) { rep(i,n) ans[i][l] = c[i][0]; return; } vi verts; int cur_edge = 0; int block = siz(c)*siz(c[0]); int color = block+n; rep(i,block+n) { graph[i] = {}; verts.pb(i); } forall(it,c) { forall(it2,it) { if(last[it2+color] != pop_iter) { verts.pb(it2+color); graph[it2+color] = {}; last[it2+color] = pop_iter; } } } int cur = 0; int level = block; int pom = 2000000; graph[pom] = {}; verts.pb(pom); forall(it,c) { forall(it2,it) { graph[cur].pb({level,cur_edge}); graph[level].pb({cur,cur_edge}); cur_edge++; graph[it2+color].pb({cur,cur_edge}); graph[cur].pb({it2+color,cur_edge}); cur_edge++; cur++; } level++; } forall(it,c) { forall(i,it) { if(siz(graph[color+i]) % 2 == 1) { graph[pom].pb({color+i,cur_edge}); graph[color+i].pb({pom,cur_edge}); cur_edge++; } } } rep(i,cur_edge) odw[i] = 0; forall(it,verts) vert_odw[it] = 0; cycle = {}; forall(it,verts) { if(vert_odw[it] == 0) { dfs(it); cycle.pop_back(); } } vector<vi> c0(n); vector<vi> c1(n); cur = 0; forall(it,cycle) { if(it < block) { int x = it/(r-l+1); int y = it%(r-l+1); if(cur == 0) c0[x].pb(c[x][y]); else c1[x].pb(c[x][y]); cur ^= 1; } } solve(l,(l+r)/2,c0); solve((l+r)/2+1,r,c1); } int main() { ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0); //random_start(); cin >> n >> s >> t; ans.resize(n); rep(i,n) ans[i].resize(s); vector<vi> c; c.resize(n); rep(i,n) c[i].resize(s); rep(i,n) { rep(j,s) { cin >> c[i][j]; } } solve(0,s-1,c); rep(i,n) { rep(j,s) { cout << ans[i][j] << " "; } cout << "\n"; } }
#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...