Submission #1212253

#TimeUsernameProblemLanguageResultExecution timeMemory
1212253mychecksedadMemory 2 (JOI16_memory2)C++20
0 / 100
0 ms324 KiB
#include "Memory2_lib.h" #include<bits/stdc++.h> using namespace std; #define ll long long int #define MOD (1000000000+7) #define MOD1 (998244353) #define pb push_back #define all(x) x.begin(), x.end() #define en cout << '\n' #define ff first #define ss second #define pii pair<int,int> #define vi vector<int> #define cerr if(false) cerr const int N = 1e6+100, M = 1e5+10, K = 52, MX = 30; mt19937 rng(234256453); int rn(int l, int r){ return uniform_int_distribution<int>(l,r)(rng); } void f(vector<int> &V, int val){ for(int i = 0; i < V.size(); ++i){ if(V[i] == val){ V.erase(V.begin() + i); break; } } } void Solve(int t, int n){ vi v; for(int i = 1; i <= n*2; ++i){ v.pb(i-1); } vector<vi> res(2*n); while(v.size() > 2){ int m = v.size(); m--; int x = rn(0, m); int y = rn(0, m); int z = rn(0, m); while(x==y) y=rn(0,m); while(x==z||y==z) z=rn(0,m); int X = Flip(v[x], v[y]); int Y = Flip(v[x], v[z]); int Z = Flip(v[y], v[z]); cerr << v[x] << ' ' << v[y] << ' ' << v[z] << '\n'; cerr << X << ' ' << Y << ' ' << Z << '\n'; cerr << '\n'; if(X == Y && Y == Z){ // pop out x for now... int vx = v[x]; int vy = v[y]; int vz = v[z]; f(v, vx); f(v, vy); f(v, vz); while(v.size()){ int u = v[rn(0, int(v.size()) - 1)]; int X = Flip(vy, v[u]); int Y = Flip(vy, vz); int Z = Flip(v[u], vz); if(X == Y && Y == Z){ // we got both minimums here res[Y].pb(vy); res[Y].pb(vz); v.pb(vx); break; } if(X == Y){ // vy is the minimal one... res[Y].pb(vy); res[Y].pb(vx); v.pb(vz); break; }else if(X == Z){ res[Z].pb(v[u]); v.erase(v.begin() + u); }else{ // vz is the minimal one... res[Y].pb(vz); res[Y].pb(vx); v.pb(vy); break; } } continue; } if(X == Y){ cerr << "# " << v[x] << ' ' << X << '\n'; res[X].pb(v[x]); v.erase(v.begin()+x); }else if(X == Z){ cerr << "# " << v[y] << ' ' << Y << '\n'; res[X].pb(v[y]); v.erase(v.begin()+y); }else{ cerr << "# " << v[z] << ' ' << Z << '\n'; res[Z].pb(v[z]); v.erase(v.begin()+z); } } for(int i = 0; i < n; ++i){ if(res[i].size() == 0){ res[i].pb(v[0]); res[i].pb(v[1]); break; } } // for(int pos: v) res[n-1].pb(pos); for(int i = 0; i < n; ++i){ // cerr << res[i][0] << ' ' << res[i][1] << ' ' << i << '\n'; Answer(res[i][0], res[i][1], i); } return; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...