Submission #911186

#TimeUsernameProblemLanguageResultExecution timeMemory
911186kachuCoreputer (IOI23_coreputer)C++17
100 / 100
1 ms596 KiB
#include <bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> #include "coreputer.h" using namespace std; using namespace __gnu_pbds; #define oset tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update> #define ofind find_by_order #define okey order_of_key #define pque priority_queue #define dque deque #define que queue #define umap unordered_map #define uset unordered_set #define pipii pair<int, pair<int,int>> #define pii pair<int,int> #define mp make_pair #define pb push_back #define ppb pop_back #define pf push_front #define ppf pop_front #define iter iterator #define endl '\n' #define MOD 1000000007 #define INF 1e18 vector<int> malfunctioning_cores(int N){ if (N == 1) return {1}; vector<int> ans; for (int i = 0; i < N; i++) ans.pb(0); int low = 0, high = N - 1, pivot; int res[N]; while (low <= high){ int mid = (low + high) / 2; vector<int> query; for (int i = 0; i <= mid; i++) query.pb(i); if (mid == N - 1){ res[mid] = 1; } else{ res[mid] = run_diagnostic(query); } if (res[mid] == 0 || res[mid] == 1) high = mid - 1; else low = mid + 1; } pivot = low; ans[pivot] = 1; if (pivot == N - 1) return ans; if (res[pivot] == 0){ for (int i = 0; i < pivot; i++){ vector<int> query; query.pb(i); for (int j = pivot + 1; j < N; j++) query.pb(j); int re = run_diagnostic(query); if (re == 1) ans[i] = 1; } int cnt1 = 0; for (int i = 0; i <= pivot; i++) cnt1 += ans[i]; for (int i = pivot + 1; i < N - 1; i++){ vector<int> query; for (int j = 0; j <= pivot; j++) query.pb(j); query.pb(i); int re = run_diagnostic(query); if (re == 1) ans[i] = 1; } int cnt2 = 0; for (int i = pivot + 1; i < N - 1; i++) cnt2 += ans[i]; if (pivot != N - 1) ans[N - 1] = (cnt1 - cnt2); } else{ for (int i = 0; i < pivot; i++){ vector<int> query; query.pb(i); for (int j = pivot + 1; j < N; j++) query.pb(j); int re = run_diagnostic(query); if (re == 1) ans[i] = 1; } int cnt1 = 0; for (int i = 0; i <= pivot; i++) cnt1 += ans[i]; for (int i = pivot + 1; i < N - 1; i++){ vector<int> query; for (int j = 0; j < pivot; j++) query.pb(j); query.pb(i); int re = run_diagnostic(query); if (re == 1) ans[i] = 1; } int cnt2 = 0; for (int i = pivot + 1; i < N - 1; i++) cnt2 += ans[i]; if (pivot != N - 1) ans[N - 1] = (cnt1 - cnt2 - 1); } return ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...