제출 #1093866

#제출 시각아이디문제언어결과실행 시간메모리
1093866DobromirAngelov도서관 (JOI18_library)C++14
0 / 100
32 ms600 KiB
#include "library.h"
#include<bits/stdc++.h>

using namespace std;

const int MAXN=1005;

int n;
vector<int> m;
bool used[MAXN];

int queryNot(int ind)
{
    for(int i=0;i<n;i++)
    {
        m[i]=1;
        if(i==ind-1) m[i]=0;
    }
    return Query(m);
}

int query(vector<int> v)
{
    for(int i=0;i<n;i++) m[i]=0;
    for(auto x: v) m[x-1]=1;
    return Query(m);
}

void Solve(int N)
{
    n=N;
    m.resize(n);

    int st=0;
    for(int i=1;i<=n;i++)
    {
        if(queryNot(i)==1)
        {
            st=i;
            break;
        }
    }

    vector<int> res;
    res.push_back(st);
    used[st]=1;
    vector<int> pot;
    pot.reserve(n);
    for(int i=2;i<=n;i++)
    {
        pot.clear();
        for(int j=1;j<=n;j++)
        {
            if(!used[j]) pot.push_back(j);
        }

        int nxt=0;
        for(int j=0;(1<<j)<=(int)pot.size();j++)
        {
            vector<int> cur;
            for(int k=0;k<(int)pot.size();k++)
            {
                if(k&(1<<j)) cur.push_back(pot[k]);
            }
            if((int)cur.size()<=0) continue;
            int cnt1=query(cur);
            cur.push_back(res.back());
            int cnt2=query(cur);
            if(cnt1==cnt2) nxt|=(1<<j);
        }
        res.push_back(pot[nxt]);
        used[res.back()]=1;
    }

    Answer(res);
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...