답안 #236586

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
236586 2020-06-02T14:13:48 Z LittleFlowers__ 도서관 (JOI18_library) C++17
0 / 100
273 ms 504 KB
#include <bits/stdc++.h>
using namespace std;
#define in ({int x=0;int c=getchar(),n=0;for(;!isdigit(c);c=getchar()) n=(c=='-');for(;isdigit(c);c=getchar()) x=x*10+c-'0';n?-x:x;})
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
int rnd(int l,int r){return l+rng()%(r-l+1);}
#define fasty ios_base::sync_with_stdio(0),cin.tie(0);
#define forinc(a,b,c) for(int a=b,_c=c;a<=_c;++a)
#define fordec(a,b,c) for(int a=b,_c=c;a>=_c;--a)
#define forv(a,b) for(auto&a:b)
#define fi first
#define se second
#define pb push_back
#define ii pair<int,int>
#define mt make_tuple
#define all(a) a.begin(),a.end()
#define reset(f, x) memset(f, x, sizeof(f))
#define bit(x,i) ((x>>(i-1))&1)
#define on(x,i) (x|(1ll<<(i-1)))
#define off(x,i) (x&~(1<<(i-1)))
#define gg exit(0);

#include "library.h"

int n;
int mode;

int x[1111], y[1111], id[1111];

int root(int i){
    return !id[i] ? i : id[i]=root(id[i]);
}
void join(int i,int j){
    if((i=root(i))==(j=root(j))) return;
    id[i]=j;
}

int tim(const vector<int>&q,int mode=1){
    vector<int> fac(n), ask(n);
    if(mode){
        forv(i,q) fac[i-1]=1;
        forinc(i,1,n) if(fac[root(i)-1]) ask[i-1]=1;
    } else{
        forv(i,q) ask[i-1]=1;
    }
    return Query(ask);
}

int dnc(vector<int> l,int i){
    if(l.back()==i) l.pop_back();
    if(l.size()<2) return l[0];
    vector<int> r;
    while(l.size()>r.size()){
        r.push_back(l.back());
        l.pop_back();
    }
    l.push_back(i);
    return tim(l) < l.size() ? dnc(l,i) : dnc(r,i);
}

int pf,sf;
void dnc1(vector<int> l,int i,int has=2){
    if(l.size()<2){
        if(pf) sf=l[0]; else pf=l[0];
        return;
    }
    vector<int> r;
    while(l.size()>r.size()){
        r.push_back(l.back());
        l.pop_back();
    }
    l.push_back(i);
    int to=tim(l);
    if(l.size()==to+1){
        l.pop_back();
        dnc1(l,i,1);
        if(has>1) dnc1(r,i,1);
    } else if(l.size()==to){
        dnc1(r,i,has);
    } else{
        l.pop_back();
        dnc1(l,i,has);
    }
}

vector<int> ad[1111];

void add(int i,int j){
    ad[i].push_back(j);
    ad[j].push_back(i);
}

void Solve(int N){
    n=N;
    vector<int> ask(n);
    ask[0]=x[1]=y[1]=1;

    vector<int> mp={1};

    int tot=1;
    forinc(i,2,n){
        ask[i-1]=1;
        int tmp=Query(ask);
        if(tot<tmp){
            mp.push_back(i);
            x[i]=y[i]=i;
        } else if(tot>tmp){
            pf=sf=0;
            if(i==4) mode=1;
            dnc1(mp,i);
            join(pf,i);
            join(sf,i);
            if(tim({x[pf],i},0)==1) add(x[pf],i), x[i]=y[pf]; else add(y[pf],i), y[i]=x[pf];
            if(tim({x[sf],i},0)==1) add(x[sf],i), (x[i] ? y[i]=y[sf] : x[i]=y[sf]); else add(y[sf],i), (x[i] ? y[i]=x[sf] : x[i]=x[sf]);
            fordec(i,mp.size()-1,0){
                if(mp[i]==pf || mp[i]==sf){
                    swap(mp[i],mp.back());
                    mp.pop_back();
                }
            }
            mp.push_back(i);
        } else{
            int to=dnc(mp,i);
            join(i,to);
            if(tim({x[to],i},0)==1){
                add(i,x[to]);
                x[to]=i;
            } else{
                add(i,y[to]);
                y[to]=i;
            }
        }
        tot=tmp;
    }
    forinc(i,1,n){
        if(ad[i].size()==1){
            vector<int> ans={i};
            int pre=-1;
            forinc(j,2,n){
                forv(t,ad[i]){
                    if(t!=pre){
                        ans.push_back(t);
                        pre=i;
                        i=t;
                        break;
                    }
                }
            }
            Answer(ans);
            gg
        }
    }
    exit(-1);
}


Compilation message

library.cpp: In function 'int dnc(std::vector<int>, int)':
library.cpp:57:19: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     return tim(l) < l.size() ? dnc(l,i) : dnc(r,i);
            ~~~~~~~^~~~~~~~~~
library.cpp: In function 'void dnc1(std::vector<int>, int, int)':
library.cpp:73:16: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     if(l.size()==to+1){
        ~~~~~~~~^~~~~~
library.cpp:77:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     } else if(l.size()==to){
               ~~~~~~~~^~~~
# 결과 실행 시간 메모리 Grader output
1 Incorrect 23 ms 384 KB Unexpected end of file - token expected
2 Incorrect 34 ms 384 KB Unexpected end of file - token expected
3 Incorrect 29 ms 384 KB Unexpected end of file - token expected
4 Incorrect 29 ms 384 KB Unexpected end of file - token expected
5 Incorrect 26 ms 384 KB Unexpected end of file - token expected
6 Incorrect 31 ms 384 KB Unexpected end of file - token expected
7 Incorrect 28 ms 384 KB Unexpected end of file - token expected
8 Incorrect 26 ms 384 KB Unexpected end of file - token expected
9 Incorrect 29 ms 384 KB Unexpected end of file - token expected
10 Incorrect 16 ms 412 KB Unexpected end of file - token expected
11 Runtime error 4 ms 308 KB Execution failed because the return code was nonzero
12 Incorrect 5 ms 384 KB Unexpected end of file - token expected
13 Incorrect 4 ms 384 KB Unexpected end of file - token expected
14 Incorrect 5 ms 384 KB Unexpected end of file - token expected
15 Incorrect 5 ms 384 KB Unexpected end of file - token expected
16 Incorrect 6 ms 384 KB Unexpected end of file - token expected
# 결과 실행 시간 메모리 Grader output
1 Incorrect 23 ms 384 KB Unexpected end of file - token expected
2 Incorrect 34 ms 384 KB Unexpected end of file - token expected
3 Incorrect 29 ms 384 KB Unexpected end of file - token expected
4 Incorrect 29 ms 384 KB Unexpected end of file - token expected
5 Incorrect 26 ms 384 KB Unexpected end of file - token expected
6 Incorrect 31 ms 384 KB Unexpected end of file - token expected
7 Incorrect 28 ms 384 KB Unexpected end of file - token expected
8 Incorrect 26 ms 384 KB Unexpected end of file - token expected
9 Incorrect 29 ms 384 KB Unexpected end of file - token expected
10 Incorrect 16 ms 412 KB Unexpected end of file - token expected
11 Runtime error 4 ms 308 KB Execution failed because the return code was nonzero
12 Incorrect 5 ms 384 KB Unexpected end of file - token expected
13 Incorrect 4 ms 384 KB Unexpected end of file - token expected
14 Incorrect 5 ms 384 KB Unexpected end of file - token expected
15 Incorrect 5 ms 384 KB Unexpected end of file - token expected
16 Incorrect 6 ms 384 KB Unexpected end of file - token expected
17 Incorrect 257 ms 468 KB Unexpected end of file - token expected
18 Incorrect 250 ms 504 KB Unexpected end of file - token expected
19 Incorrect 244 ms 384 KB Unexpected end of file - token expected
20 Incorrect 245 ms 384 KB Unexpected end of file - token expected
21 Incorrect 207 ms 428 KB Unexpected end of file - token expected
22 Incorrect 267 ms 384 KB Unexpected end of file - token expected
23 Incorrect 249 ms 384 KB Unexpected end of file - token expected
24 Incorrect 91 ms 424 KB Unexpected end of file - token expected
25 Incorrect 273 ms 452 KB Unexpected end of file - token expected
26 Incorrect 218 ms 384 KB Unexpected end of file - token expected
27 Incorrect 84 ms 384 KB Unexpected end of file - token expected
28 Incorrect 53 ms 456 KB Unexpected end of file - token expected
29 Incorrect 53 ms 436 KB Unexpected end of file - token expected
30 Incorrect 52 ms 384 KB Unexpected end of file - token expected