| # | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 | 
|---|---|---|---|---|---|---|---|
| 1145383 | modwwe | Library (JOI18_library) | C++20 | 0 ms | 0 KiB | 
#pragma GCC optimize("Ofast,unroll-loops")
//#include "library.h"
#include<bits/stdc++.h>
//#define int   long long
#define ll long long
#define down cout<<'\n';
#define debug cout<<" cucuucucuuu",down
#define NHP     ios_base::sync_with_stdio(0);cout.tie(0);cin.tie(0);
#define modwwe  int t;cin>>t; while(t--)
#define bit(i,j) (i>>j&1)
#define sobit(a) __builtin_popcountll(a)
#define task2 "partner"
#define task "test"
#define fin(x) freopen(x".inp","r",stdin)
#define fou(x) freopen(x".out","w",stdout)
#define pb push_back
#define mask(k) (1<<k)
#define mp make_pair
#define checktime   cerr << (double)clock() / CLOCKS_PER_SEC * 1000  << " ms";
using namespace std;
#define getchar_unlocked getchar
mt19937 rd(chrono::steady_clock::now().time_since_epoch().count());
int rand(int l,int r)
{
    return uniform_int_distribution<int>(l,r)(rd);
}
inline int scan()
{
    char c = getchar_unlocked();
    int x = 0;
    while (c < '0' || c > '9')
    {
        c = getchar_unlocked();
    }
    while (c >= '0' && c <= '9')
    {
        x = (x << 1) + (x << 3) + c - '0';
        c = getchar_unlocked();
    }
    return x;
}
void phongbeo();
const int inf = 1e9;
int mod2 = 1e9+7;
const int  mod1 = 998244353;
const ll base=67;
int add(int x,int y)
{
    if(x+y>=mod2) x-=mod2;
    if(x+y<0)x+=mod2;
    return x+y;
}
struct icd
{
    long double a;
    int b;
};
struct ib
{
    ll a;
    int b;
};
struct ic
{
    int a,b,c;
};
struct id
{
    int a, b, c, d;
};
struct ie
{
    int a, b, c, d, e;
};
ll  n, m, s1, s2, s4, s3, sf, k, s5, s6, mx, s7, s8, s9, mx2, res, dem2 = 0, dem = 0, s33, dem3, dem4, mid, l2, r2, center;
ll  i, s10, s12,k1,k2,k3,s11,lim,w,l,r ;
ll kk;
ll el = 19;/*
main()
{
    if(fopen(task2".inp","r"))
    {
        fin(task2);
        fou(task2);
    }
    if(fopen(task".inp","r"))
    {
        fin(task);
        fou(task);
    }
    NHP
    // cin>>s1;
    //modwwe
    phongbeo();
    // checktime
}*/
vector<int> start,v,lost,h;
bool c[1001];/*
int query(vector<int>& v)
{
    int s=0;
    if(v[h[0]-1])s++;
    for(int i=1; i<n; i++)
    {
        if(v[h[i]-1]&&v[h[i]-1]!=v[h[i-1]-1])
            s++;
    }
    return s;
}*/
void Answer(vector<int>&v)
{
    bool de=0;
    for(int i=0; i<v.size(); i++)
    {
        if(v[i]!=h[i]) break;
        if(i==v.size()-1)de=1;
    }
    reverse(v.begin(),v.end());
    for(int i=0; i<v.size(); i++)
    {
        if(v[i]!=h[i]) break;
        if(i==v.size()-1)de=1;
    }
    if(!de)
    {
        cout<<"-1 apio";
    }
}
int get(vector<int>&a)
{
    if(a.size()==1) return a[0];
    int mid=a.size()/2;
    int costleft,costright;
    for(int i=0; i<mid; i++)
        v[a[i]]=1;
    costleft=Query(v);
    for(int i=0; i<n; i++)
        if(!c[i])
            v[i]=1-v[i];
    v[s3]=0;
    costright=Query(v);
    for(int i=0; i<n; i++)
        v[i]=0;
    v[s3]=1;
    vector<int> b;
    if(costleft>costright)
    {
        for(int i=0; i<mid; i++)
            b.pb(a[i]);
    }
    else
    {
        for(int i=mid; i<a.size(); i++)
            b.pb(a[i]);
    }
    return get(b);
}
void solve(int N)
{
    n=N;
    for(int i=1; i<=n; i++)
        v.pb(1);
    for(int i=0; i<n; i++)
    {
        v[i]=0;
        s2=Query(v);
        if(s2==1)
        {
            s3=i;
            break;
        }
        v[i]=1;
    }
    for(int i=1; i<=n; i++)
        v[i]=0;
    c[s3]=1;
    v[s3]=1;
    for(int i=2; i<=n; i++)
    {
        lost.clear();
        for(int j=0; j<n; j++)
            if(!c[j])
                lost.pb(j);
        s2=get(lost);
        c[s2]=1;
        v[s2]=0;
        start.pb(s2+1);
    }
    start.pb(s3+1);
    Answer(start);
}/*
void phongbeo()
{
    cin>>n;
    h.resize(n);
    for(int i=1; i<=n; i++)
    {
//cin>>h[i-1];
        h[i-1]=i;
    }
    shuffle(h.begin(),h.end(),rd);
    //for(auto x:h)
    //  cout<<x<<" ";
    solve(n);
}*/
