This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |