Submission #872391

#TimeUsernameProblemLanguageResultExecution timeMemory
872391browntoadMinerals (JOI19_minerals)C++14
85 / 100
25 ms3252 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.39; int ou; void run(vector<int> &L, vector<int> &R, bool x, bool y){ 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 && y == 0){ Query(L[0]); ret = Query(R[0]); if (ret == ou+2){ Answer(L[0], R[1]); Answer(L[1], R[0]); } else{ Answer(L[0], R[0]); Answer(L[1], R[1]); } } else if (x == 0 && y == 1){ Query(R[1]); ret = Query(L[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 if (x == 1 && y == 0){ Query(L[1]); 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 { 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]); } } ou = ret; return; } REP(i, mid){ ou = Query(L[i]); lll.pb(L[i]); } FOR(i, mid, SZ(L)){ rl.pb(L[i]); } if (x == 0 && y == 0){ REP(i, SZ(R)){ ret = Query(R[i]); if (ret == ou) lr.pb(R[i]); else rr.pb(R[i]); ou = ret; } run(lll, lr, 1, 1); run(rl, rr, 0, 1); } else if (x == 0 && y == 1){ REP(i, SZ(R)){ ret = Query(R[i]); if (ret == ou) lr.pb(R[i]); else rr.pb(R[i]); ou = ret; } run(lll, lr, 1, 0); run(rl, rr, 0, 0); } else if (x == 1 && y == 0){ REP(i, SZ(R)){ ret = Query(R[i]); if (ret != ou) lr.pb(R[i]); else rr.pb(R[i]); ou = ret; } run(lll, lr, 0, 1); run(rl, rr, 1, 1); } else { REP(i, SZ(R)){ ret = Query(R[i]); if (ret != ou) lr.pb(R[i]); else rr.pb(R[i]); ou = ret; } run(lll, lr, 0, 0); run(rl, rr, 1, 0); } } 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; //REP(i, SZ(a)) Query(a[i]); run(a, b, 1, 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...