Submission #1072893

#TimeUsernameProblemLanguageResultExecution timeMemory
1072893CyanberryMinerals (JOI19_minerals)C++14
70 / 100
114 ms2460 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; 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 = 0; i < types; ++i) { if (sT[i] > 2 * types || sT[i] <= 0) cout<<"scream at me"; } for (int i = log2(types); i >= 0; --i) { for (int j = 0; j < types; ++j) { if (((j & (1<<i)) > 0) == inside[j]) { 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...