Submission #872427

#TimeUsernameProblemLanguageResultExecution timeMemory
872427browntoadMinerals (JOI19_minerals)C++14
100 / 100
40 ms3364 KiB
#include <bits/stdc++.h> #include <minerals.h> using namespace std; #define ll long long // #define int ll #define FOR(i, a, b) for (int i = (a); i < (b); i++) #define REP(i, n) FOR(i, 0, n) #define REP1(i, n) FOR(i, 1, n+1) #define RREP(i, n) for (int i = (n)-1; i >= 0; i--) #define RREP1(i, n) for (int i = (n); i >= 1; i--) #define ALL(x) (x).begin(), (x).end() #define SZ(x) (int)((x).size()) #define pb push_back #define pii pair<int, int> #define f first #define s second const ll maxn = 5e5+5; const ll inf = (1ll<<60); const ll mod = 1000992299; const long double p = 0.40001; int ou; void run(vector<int> &L, vector<int> &R, bool x){ if (SZ(L) == 1 && SZ(R) == 1){ Answer(L[0], R[0]); return; } int mid = SZ(L)*p, ret; vector<int> lll, lr, rl, rr; if (SZ(L) == 2 && SZ(R) == 2){ if (x == 0){ ou = Query(L[0]); ret = Query(R[0]); if (ret != ou){ Answer(L[0], R[1]); Answer(L[1], R[0]); } else{ Answer(L[0], R[0]); Answer(L[1], R[1]); } } else { ou = Query(L[0]); ret = Query(R[0]); if (ret == ou){ Answer(L[0], R[1]); Answer(L[1], R[0]); } else{ Answer(L[0], R[0]); Answer(L[1], R[1]); } } return; } REP(i, mid){ ou = Query(L[i]); lll.pb(L[i]); } FOR(i, mid, SZ(L)){ rl.pb(L[i]); } if (x == 0){ REP(i, SZ(R)){ if (SZ(lll) == SZ(lr)){ rr.pb(R[i]); continue; } if (SZ(rl) == SZ(rr)){ lr.pb(R[i]); continue; } ret = Query(R[i]); if (ret == ou) lr.pb(R[i]); else rr.pb(R[i]); ou = ret; } run(lll, lr, 1); run(rl, rr, 0); } else { REP(i, SZ(R)){ if (SZ(lll) == SZ(lr)){ rr.pb(R[i]); continue; } if (SZ(rl) == SZ(rr)){ lr.pb(R[i]); continue; } ret = Query(R[i]); if (ret != ou) lr.pb(R[i]); else rr.pb(R[i]); ou = ret; } run(lll, lr, 0); run(rl, rr, 1); } } void Solve(int N){ vector<int> a, b; //REP1(i, N) a.pb(i); //FOR(i, N+1, 2*N+1) b.pb(i); int ret, prev = 0; REP1(i, 2*N){ ret = Query(i); if (ret != prev) { a.pb(i); prev = ret; } else { b.pb(i); } } ou = prev; random_shuffle(ALL(a)); random_shuffle(ALL(b)); //REP(i, SZ(a)) Query(a[i]); run(a, b, 1); }
#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...