Submission #1132393

#TimeUsernameProblemLanguageResultExecution timeMemory
1132393StefanSebezStations (IOI20_stations)C++20
0 / 100
307 ms2884 KiB
#include<bits/stdc++.h> using namespace std; #define fi first #define se second #define pb push_back #define ll long long #define ld long double const int N=1e5+50,M=1000; vector<int>E[N]; int in[N],out[N],nc=-1; void DFS(int u,int parent=-1){ in[u]=++nc; for(auto i:E[u]){ if(i!=parent) DFS(i,u); } out[u]=nc; } std::vector<int> label(int n, int k, std::vector<int> u, std::vector<int> v){ for(int i=0;i<n-1;i++){ E[u[i]].pb(v[i]); E[v[i]].pb(u[i]); } /*int root=0;DFS(root); vector<int>lbl;for(int i=0;i<n;i++) lbl.pb(in[i]+M*out[i]); for(int i=0;i<=n;i++) E[i].clear(),in[i]=out[i]=0,nc=-1; return lbl;*/ int root=0; for(int i=0;i<n;i++) if(E[i].size()==2) root=i; int num[n+10]={0}; queue<int>kju;kju.push(root); num[root]=1; while(!kju.empty()){ int u=kju.front();kju.pop(); for(int I=0,ct=0;I<E[u].size();I++){ int i=E[u][I]; if(num[i]) continue; num[i]=2*num[u]+ct++; kju.push(i); } } //for(int i=0;i<n;i++) printf("%i ",num[i]);printf("\n"); vector<int>lbl;for(int i=0;i<n;i++) lbl.pb(num[i]); return lbl; } int IN(int x){return x%M;} int OUT(int x){return x/M;} bool Podstablo(int x,int y){if(IN(x)<=IN(y)&&IN(y)<=OUT(x))return true;return false;} int find_next_station(int s, int t, std::vector<int> c){ /*int res=c[0]; if(s<t){ for(int i=0;i<c.size();i++){ int u=c[i]; if(u>s) res=u; } } else{ for(int i=0;i<c.size();i++){ int u=c[i]; if(u<s) res=u; } }*/ /*int res=c[0]; if(Podstablo(s,t)){ for(auto i:c){ if(Podstablo(i,t)&&!Podstablo(i,s)) res=i; } } else{ for(auto i:c){ if(Podstablo(i,s)) res=i; } }*/ int res=c[0]; vector<int>bits[2]; int temp=s;while(temp) bits[0].pb(temp&1),temp>>=1; temp=t;while(temp) bits[1].pb(temp&1),temp>>=1; reverse(bits[0].begin(),bits[0].end()); reverse(bits[1].begin(),bits[1].end()); //printf("%i: ",s);for(auto i:bits[0]) printf("%i",i);printf("\n"); //printf("%i: ",t);for(auto i:bits[1]) printf("%i",i);printf("\n"); if(bits[1].size()<=bits[0].size()){ for(auto i:c){ if(i<s) res=i; } } else{ bool bul=false; for(int i=0;i<bits[0].size();i++) if(bits[0][i]!=bits[1][i]) bul=true; if(bul==true){ for(auto i:c){ if(i<s) res=i; } } else{ int bit=bits[1][bits[0].size()]; //cerr<<bit<<endl; for(auto i:c){ if(i>s&&((i&1)==bit)) res=i; } } } return res; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...