Submission #908312

#TimeUsernameProblemLanguageResultExecution timeMemory
908312shoryu386Coreputer (IOI23_coreputer)C++17
20 / 100
1 ms344 KiB
#include "coreputer.h" #include <bits/stdc++.h> using namespace std; vector<int> ntwo(){ int res = run_diagnostic({0}); if (res == 1){ return {1, 0}; } else if (res == 0){ int any = run_diagnostic({0, 1}); if (any == 0){ return {0, 0}; } else return {1, 1}; } else return {0, 1}; } vector<int> malfunctioning_cores(int N) { if (N == 2){ return ntwo(); } int firstZero = -1, lastZero = -1; int l = 0, r = N-1; while (l <= r){ int m = (l+r)/2; vector<int> bruh; for (int y = 0; y <= m; y++) bruh.push_back(y); int res = run_diagnostic(bruh); //cerr << m << ' ' << run_diagnostic(bruh) << "???\n" ; if (res == -1){ r = m-1; } else if (res == 0){ r = m-1; firstZero = m; } else{ l = m+1; } } l = 0, r = N-1; while (l <= r){ int m = (l+r)/2; vector<int> bruh; for (int y = 0; y <= m; y++) bruh.push_back(y); int res = run_diagnostic(bruh); //cerr << m << ' ' << run_diagnostic(bruh) << "???\n" ; if (res == -1){ l = m+1; } else if (res == 0){ l = m+1; lastZero = m; } else{ r = m-1; } } //assert(lastZero != -1); //even case //assert(firstZero != -1); //cerr << firstZero << ' ' << lastZero << '\n'; //our malfunctions are at firstZero, and lastZero+1 //we also now know that there are an equal number of malfunctions in the two segments [0, firstZero-1] and [lastZero+2, 15] vector<int> ans(N, 0); ans[firstZero] = 1; ans[lastZero+1] = 1; for (int x = N-1; x > lastZero+1; x--){ //include [0, firstZero], include [lastZero+1, 15], except one element vector<int> cur; #define ADDRANGE(a, b) for (int y = a; y <= b; y++) cur.push_back(y); ADDRANGE(0, firstZero); //ADDRANGE(lastZero+1, 15); //cur.erase(find(cur.begin(), cur.end(), x)); ADDRANGE(x, x); int res = run_diagnostic(cur); //cerr << "\n run: \n"; //for (auto y : cur) cerr << y << ' '; //cerr << '\n'; //cerr << res << '\n'; if (res == 0){ ans[x] = 0; } else ans[x] = 1; } for (int x = 0; x < firstZero; x++){ //include [0, firstZero], exclude [lastZero+1, 15], except one element vector<int> cur; #define ADDRANGE(a, b) for (int y = a; y <= b; y++) cur.push_back(y); //ADDRANGE(0, firstZero); ADDRANGE(lastZero+1, N-1); ADDRANGE(x, x); //cur.erase(find(cur.begin(), cur.end(), x)); int res = run_diagnostic(cur); if (res == 0){ ans[x] = 0; } else ans[x] = 1; } return ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...