Submission #433972

#TimeUsernameProblemLanguageResultExecution timeMemory
433972alishahali1382Minerals (JOI19_minerals)C++14
100 / 100
123 ms4176 KiB
#include "minerals.h" #include <bits/stdc++.h> #pragma GCC optimize ("O2,unroll-loops") //#pragma GCC optimize("no-stack-protector,fast-math") //#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native") using namespace std; typedef long long ll; typedef long double ld; typedef pair<int, int> pii; typedef pair<pii, int> piii; typedef vector<int> vi; #define debug(x) cerr<<#x<<'='<<(x)<<endl; #define debugp(x) cerr<<#x<<"= {"<<(x.first)<<", "<<(x.second)<<"}"<<endl; #define debug2(x, y) cerr<<"{"<<#x<<", "<<#y<<"} = {"<<(x)<<", "<<(y)<<"}"<<endl; #define debugv(v) {cerr<<#v<<" : ";for (auto x:v) cerr<<x<<' ';cerr<<endl;} #define all(x) x.begin(), x.end() #define pb push_back #define SZ(x) ((int)x.size()) const int inf=1000000010; const ll INF=1000000000000001000LL; const int mod=1000000007; const int MAXN=100010, LOG=20; int n, m, k, u, v, x, y, a, b, t, ans; int mark[MAXN]; mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); int Ask(int x){ mark[x]^=1; return ans=Query(x); } int diff(vi &vec){ int ted=0; for (int x:vec) ted+=mark[x]; return abs(SZ(vec)/2 - ted); } void divide(vi X, vi Y){ if (SZ(X)==1){ Answer(X[0], Y[0]); return ; } if (diff(X)>diff(Y)) swap(X, Y); int sz=SZ(X), mid=sz/2; shuffle(all(Y), rng); sort(all(X), [](int i, int j){ return mark[i]>mark[j]; }); vi X1, X2, Y1, Y2; for (int i=0; i<sz; i++){ if (i<mid) X1.pb(X[i]); else X2.pb(X[i]); } for (int x:X1) if (!mark[x]) Ask(x); for (int x:X2) if (mark[x]) Ask(x); for (int y:Y){ if (SZ(Y1)==mid) Y2.pb(y); else if (SZ(Y2)==sz-mid) Y1.pb(y); else{ int last=ans; if (Ask(y)==last) Y1.pb(y); else Y2.pb(y); } } divide(X1, Y1); divide(X2, Y2); } void Solve(int _n){ n=_n; vi X, Y, P(2*n); iota(all(P), 1); shuffle(all(P), rng); for (int i:P){ int last=ans; if (SZ(X)==n || Ask(i)==last) Y.pb(i); else X.pb(i); } divide(X, Y); }
#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...