Submission #1235034

#TimeUsernameProblemLanguageResultExecution timeMemory
1235034HossamHero7스핑크스 (IOI24_sphinx)C++20
0 / 100
1 ms320 KiB
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#include "sphinx.h"
// #include "grader.cpp"
bool vis[505];
vector<int> g[505];
vector<int> color;
int CC;
int n;
vector<int> p;
std::vector<int> find_colours(int N, std::vector<int> X, std::vector<int> Y) {
    n = N;
    color.resize(n);
    vector<int> v{0};
    auto query = [&](int l,int r,int x){
        int a,b;
        cin>>a>>b;
        vector<int> tmp(n,n);
        for(int i=l;i<=r;i++) tmp[v[i]] = -1;
        tmp[x] = -1;
        bool rem = n - (r - l + 1) - 1;
        return perform_experiment(tmp) == r - l + 2 + rem;
    };
    int pt = 1;
    for(int i=1;i<n;i++){
        int l = 0;
        int r = (int)v.size() - 1;
        if(query(0,(int)v.size()-1,i)){
            v.push_back(i);
            color[i] = pt ++;
            continue;
        }
        while(l < r){
            int md = (l + r) >> 1;
            if(query(l,md,i)){
                l = md + 1;
            }
            else r = md;
        }
        color[i] = color[v[l]];
    }
    vector<int> id(pt,n-1);
    for(int c=0;c<n-1;c++){
        int l = 0;
        int r = v.size();
        r --;
        if(l == r){
            vector<int> tmp(n,c);
            tmp[v[0]] = -1;
            if(perform_experiment(tmp) != 1) r = -1;
        }
        bool b = 0;
        while(l < r){
            int md = (l + r) >> 1;
            vector<int> tmp(n,c);
            for(int i=l;i<=md;i++) tmp[v[i]] = -1;
            if(perform_experiment(tmp) == md - l + 1){
                r = md;
            }
            else {
                if(b){
                    l = md + 1;
                }
                else {
                    fill(tmp.begin(),tmp.end(),c);
                    for(int i=md+1;i<=r;i++) tmp[v[i]] = -1;
                    if(perform_experiment(tmp) == r - (md+1) + 1){
                        l = md + 1;
                    }
                    else goto gt;
                }
            }
            b - 1;
        }
        if(l == r) {
            id[color[v[l]]] = c;
            v.erase(v.begin()+l);
            if(v.empty()) break;
        }
        gt:continue;
    }
    for(auto &i:color) i = id[i];
    return color;
}
#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...