제출 #1228694

#제출 시각아이디문제언어결과실행 시간메모리
1228694MarwenElarbiCoreputer (IOI23_coreputer)C++20
80 / 100
0 ms408 KiB
#include "coreputer.h"
#include <bits/stdc++.h>
using namespace std;

std::vector<int> malfunctioning_cores(int N) {
    int l=-1;
    int r=N;
    bool lst=false;
    vector<int> ans;
    while(r-l>1){
        int mid=(r+l)/2;
        vector<int> cur;
        for (int i = 0; i <= mid; ++i)
        {
            cur.push_back(i);
        }
        int cnt=run_diagnostic(cur);
        lst|=(cnt==0);
        if(cnt<=0) l=mid;
        else r=mid;
    }
    if(lst==1){
        ans.push_back(r);
        for (int i = r+1; i < N; ++i)
        {
            vector<int> cur; 
            cur.push_back(i);
            for (int j = 0; j <= l; ++j)
            {
                cur.push_back(j);
            }
            if(run_diagnostic(cur)==1) ans.push_back(i);
        }
        int half=ans.size();
        for (int i = 0; i < l; ++i)
        {
            vector<int> cur;
            for (int j = 0; j < half; ++j)
            {
                cur.push_back(ans[j]);
            }
            cur.push_back(i);
            if(run_diagnostic(cur)>0) ans.push_back(i); 
        }
        if(ans.size()%2) ans.push_back(l);
        sort(ans.begin(),ans.end());
        vector<int> res(N,0);
        for (auto u:ans)
        {
            res[u]=1;
        }
        return res;

    }else{
        ans.push_back(r);
        for (int i = r+1; i < N; ++i)
        {
            vector<int> cur; 
            cur.push_back(i);
            for (int j = 0; j <= l; ++j)
            {
                cur.push_back(j);
            }
            if(run_diagnostic(cur)==1) ans.push_back(i);
        }
        int half=ans.size()-1;
        for (int i = 0; i < l; ++i)
        {
            vector<int> cur;
            for (int j = 0; j < half; ++j)
            {
                cur.push_back(ans[j]);
            }
            cur.push_back(i);
            if(run_diagnostic(cur)>0) ans.push_back(i); 
        }
        if(ans.size()%2==0) ans.push_back(l);
        sort(ans.begin(),ans.end());
        vector<int> res(N,0);
        for (auto u:ans)
        {
            res[u]=1;
        }
        return res;
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...