Submission #144657

#TimeUsernameProblemLanguageResultExecution timeMemory
144657AbelyanZagonetka (COI18_zagonetka)C++17
0 / 100
94 ms19240 KiB
#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); } int z[N],h[N]; int get(int v){ if (z[v]!=-1)return z[v]; z[v]=0; trav(to,g[v])z[v]+=get(to)+1; //cout<<v<<" "<<z[v]<<endl; return z[v]; } int geth(int v){ if (h[v]!=-1)return h[v]; h[v]=0; trav(to,hg[v])h[v]+=geth(to)+1; //cout<<v<<" "<<h[v]<<endl; return h[v]; } 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; } } assert(qanq<=5000); cout<<"end"<<endl; FORT(i,0,n){ z[i]=-1; h[i]=-1; } //vts(false); FORT(i,1,n)col[i]=false; FOR(i,n){ //cout<<i<<" "<<g[i].size()+1<<" "; FORT(j,get(i)+1,n){ if (!col[j]){ cout<<j<<" "; col[j]=true; break; } } //cout<<endl; } cout<<endl; //vts(true); FORT(i,1,n)col[i]=false; FOR(i,n){ FORTD(j,n-geth(i),1){ if (!col[j]){ cout<<j<<" "; col[j]=true; break; } } } cout<<endl; return 0; } /* 4 4 1 3 2 1 0 1 0 0 */

Compilation message (stderr)

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()){
     ^~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...