Submission #1242324

#TimeUsernameProblemLanguageResultExecution timeMemory
1242324KindaGoodGamesScales (IOI15_scales)C++20
33.33 / 100
0 ms328 KiB
#include "scales.h" #include<bits/stdc++.h> using namespace std; void init(int T) { /* ... */ } void orderCoins() { // 3 queries int lo1 = getLightest(1,2,3); int lo2 = getLightest(4,5,6); int lo = -1; if(lo1 != 5 && lo2 != 5){ lo = getLightest(lo1,5,lo2); }else if(lo1 != 4 && lo2 != 4){ lo = getLightest(lo1,4,lo2); }else{ lo = getLightest(lo1,3,lo2); } int pt = 1; int ans[] = {lo,-1,-1,-1,-1,-1}; set<int> left; for(int i = 1; i <= 6; i++){ left.insert(i); } left.erase(lo); for(int k = 0; k < 3; k++){ vector<int> notLo; for(int t = 0; t < 4; t++){ for(int i = 1; i <= 6; i++){ if(i == lo || !left.count(i)) continue; notLo.push_back(i); } } int nlo = -1; // 2 x 2 queries if(k <= 1){ vector<int> q1; vector<int> q2; int ind = 0; while(q1.size() < 3){ if(find(q1.begin(),q1.end(), notLo[ind]) == q1.end()){ q1.push_back(notLo[ind]); } ind++; } while(q2.size() < 3){ if(find(q2.begin(),q2.end(), notLo[ind]) == q2.end()){ q2.push_back(notLo[ind]); } ind++; } int nlo1 = -1; if(q1[0] == 1 && q1[1] == 2 && q1[2] == 3){ nlo1 = lo1; }else if(q1[0] == 4 && q1[1] == 5 && q1[2] == 6){ nlo1 = lo2; }else{ nlo1 = getNextLightest(q1[0],q1[1],q1[2],lo); } int nlo2 = -1; if(q2[0] == 1 && q2[1] == 2 && q2[2] == 3){ nlo2 = lo1; } else if(q2[0] == 4 && q2[1] == 5 && q2[2] == 6){ nlo2 = lo2; }else{ nlo2 = getNextLightest(q2[0],q2[1],q2[2],lo); } if(nlo1 == nlo2){ nlo = nlo1; }else{ // eventually 2x1 query nlo = getMedian(lo,nlo1,nlo2); } } // 1 x 1 queries else{ vector<int> q; for(int i = 0; i < 6; i++){ if(left.count(i+1)){ q.push_back(i+1); } } nlo = getLightest(q[0],q[1],q[2]); } lo = nlo; ans[pt++] = lo; left.erase(lo); } // 1 x 1 queries int f = getMedian(ans[0], *left.begin(), *left.rbegin()); ans[4] = f; left.erase(f); ans[5] = *left.begin(); answer(ans); }
#Verdict Execution timeMemoryGrader output
Fetching results...