Submission #1072874

#TimeUsernameProblemLanguageResultExecution timeMemory
1072874CyanberryMinerals (JOI19_minerals)C++14
0 / 100
2 ms344 KiB
#include <bits/stdc++.h> using namespace std; #include "minerals.h" void Solve(int types) { bool side[types * 2]; int sT[types], sF[types], match[types * 2]; for (int i=0; i<types * 2; ++i) { side[i] = false; match[i] = 0; } int last = 0, sTc = 0, sFc = 0; for (int i=0; i<types * 2; ++i) { if (i + 1 > types * 2 || i < 0) { Answer(0, 2); } int curr = Query(i+1); if (curr > last) { ++last; sT[sTc] = i+1; ++sTc; if (sTc > types) cout<<"scream at me lol"; side[i] = true; } else { sF[sFc] = i+1; ++sFc; } } bool inside[types]; for (int i = 0; i < types; ++i) { inside[i] = true; } for (int i = log2(types); i >= 0; --i) { // for (int i : match) { // cerr<<i<<' '; // } // cerr<<'\n'; for (int j = 1; j <= types; ++j) { if (((j & (1<<i)) > 0) == inside[j]) { if (j > types) { Answer(2, 2); } else if (j < 0) { cout<<" "; } last = Query(sT[j]); inside[j] = !inside[j]; } } for (int j =0; j < types; ++j) { if (sF[j] > types * 2 || sF[j] < 1) { Answer(sF[0], sF[1]); } int curr = Query(sF[j]); if (curr != last) { match[sF[j]-1] |= (1<<i); last = curr; } } } for (int i = 0; i < types * 2; ++i) { if (!side[i]) { cerr<<match[i]<<' '; Answer(i+1, sT[match[i]]); } } }
#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...