답안 #144628

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
144628 2019-08-17T09:50:20 Z Abelyan Zagonetka (COI18_zagonetka) C++17
27 / 100
119 ms 19236 KB
#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;

#define FOR(i,a) for (int i=0;i<(a);++i)
#define FORD(i,a) for (int i=(a)-1;i>=0;i--)
#define FORT(i,a,b) for (int i=(a);i<=(b);++i)
#define FORTD(i,b,a) for (int i=(b);i>=(a);--i)
#define trav(i,v) for (auto i : v)
#define all(v) v.begin(),v.end()
#define ad push_back
#define fr first
#define sc second
#define mpr(a,b) make_pair(a,b)
#define pir pair<int,int>
#define all(v) v.begin(),v.end()
#define make_unique(v) v.erase(unique(all(v)),v.end())
#define fastio ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
#define srng mt19937 rng(chrono::steady_clock::now().time_since_epoch().count())
#define y1 EsiHancagorcRepa

const int N=4e5+10;
const ll MOD2=998244353;
const ll MOD=1e9+7;

int n;
int col[N],ind[N],ans[N];
vector<int> g[N];

bool dfsc(int v,int par=-1){
    col[v]=1;
    trav(to,g[v]){
        if (col[to]==2)continue;
        if (to!=par && col[to]==1)return true;
        if (dfsc(to,v))return true;
    }
    col[v]=2;
    return false;
}

bool cikl(){
    FORT(i,0,n)col[i]=0;
    FORT(i,1,n){
        if (!col[i] && dfsc(i))return true;
    }
    return false;
}
vector<int> vc;

void dfs(int v){
    col[v]=1;
    trav(to,g[v]){
        if (!col[to])dfs(to);
    }
    vc.ad(v);
}

void topsort(int k){
    vc.clear();
    FORT(i,0,n){
        col[i]=0;
        ans[i]=0;
    }
    FORT(i,1,k){
        int v=ind[i];
        if (!col[v])dfs(v);
    }
    //int qdljbj;
    FOR(i,vc.size()){
        ans[vc[i]]=i+1;
    }
}

vector<int> hg[N];

void dfsh(int v){
    col[v]=1;
    trav(to,hg[v]){
        if (!col[to])dfsh(to);
    }
    vc.ad(v);
}

void vts(bool hak){
    vc.clear();
    FORT(i,0,n){
        col[i]=0;
        ans[i]=0;
    }
    if (!hak){
        FOR(i,n){
            if (!col[i])dfs(i);
        }
    }
    else{
        FOR(i,n){
            if (!col[i])dfsh(i);
        }
    }
    FOR(i,vc.size()){
        ans[vc[i]]=i+1;
    }
}

int tv[N];

int main(){
    fastio;
    cin>>n;
    //cout<<n<<endl;
    FOR(i,n){
        cin>>tv[i];
        ind[tv[i]]=i;
    }
    //assert(tv[0]==1 && tv[1]==2 && tv[2]==3);
    //cout<<i<<endl;
    //cout<<1<<endl;
    int qanq=0;
    FORT(i,2,n){
        FORTD(j,i-1,1){
            //cout<<1<<endl;
            int a=ind[i];
            int b=ind[j];
            g[b].ad(a);
            //cout<<1<<endl;
            if (cikl()){
                g[b].pop_back();
                continue;
            }
            //cout<<1<<endl;
            topsort(i);

            cout<<"query ";
            FOR(k,n){
                if (ans[k])cout<<ans[k]<<" ";
                else cout<<tv[k]<<" ";
            }
            cout<<endl;
            int pat;
            cin>>pat;
            //if (n==4 && qanq==5 && !pat)assert(0);
            //if (qanq==5)assert(0);
            qanq++;
            //3assert(!pat);
            g[b].pop_back();
            if (!pat){
                g[a].ad(b);
                hg[b].ad(a);
                //cout<<a<<" "<<b<<endl;
            }
            //else cout<<a<<" "<<b<<endl;
        }
    }
    cout<<"end"<<endl;
    FOR(i,n){
        sort(all(g[i]));
        sort(all(hg[i]));
    }
    vts(false);
    FOR(i,n)cout<<ans[i]<<" ";
    cout<<endl;
    vts(true);
    FOR(i,n)cout<<n-ans[i]+1<<" ";
    cout<<endl;
    return 0;
}
/*
4
4 1 3 2
1
0
1
0
0
*/

Compilation message

zagonetka.cpp: In function 'void topsort(int)':
zagonetka.cpp:8:32: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
 #define FOR(i,a) for (int i=0;i<(a);++i)
                                ^
zagonetka.cpp:72:5: note: in expansion of macro 'FOR'
     FOR(i,vc.size()){
     ^~~
zagonetka.cpp: In function 'void vts(bool)':
zagonetka.cpp:8:32: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
 #define FOR(i,a) for (int i=0;i<(a);++i)
                                ^
zagonetka.cpp:103:5: note: in expansion of macro 'FOR'
     FOR(i,vc.size()){
     ^~~
# 결과 실행 시간 메모리 Grader output
1 Correct 19 ms 19064 KB Output is correct
2 Correct 19 ms 19060 KB Output is correct
3 Correct 19 ms 19064 KB Output is correct
4 Correct 19 ms 19192 KB Output is correct
5 Correct 19 ms 19192 KB Output is correct
6 Correct 19 ms 19064 KB Output is correct
7 Correct 19 ms 19192 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 32 ms 19192 KB Output is correct
2 Correct 50 ms 19192 KB Output is correct
3 Correct 43 ms 19228 KB Output is correct
4 Correct 43 ms 19144 KB Output is correct
5 Correct 29 ms 19064 KB Output is correct
6 Correct 53 ms 19192 KB Output is correct
7 Correct 24 ms 19064 KB Output is correct
8 Correct 27 ms 19192 KB Output is correct
9 Correct 49 ms 19192 KB Output is correct
10 Correct 28 ms 19148 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 20 ms 19064 KB Output is correct
2 Incorrect 19 ms 19064 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 102 ms 19144 KB Output is correct
2 Correct 119 ms 19148 KB Output is correct
3 Correct 94 ms 19192 KB Output is correct
4 Correct 24 ms 19064 KB Output is correct
5 Correct 24 ms 19236 KB Output is correct
6 Correct 25 ms 19192 KB Output is correct
7 Correct 41 ms 19064 KB Output is correct
8 Correct 51 ms 19192 KB Output is correct
9 Correct 44 ms 19064 KB Output is correct
10 Correct 95 ms 19148 KB Output is correct
11 Correct 92 ms 19192 KB Output is correct
12 Correct 94 ms 19064 KB Output is correct
13 Incorrect 78 ms 19148 KB Output isn't correct
14 Halted 0 ms 0 KB -