Submission #1095762

#TimeUsernameProblemLanguageResultExecution timeMemory
1095762NewtonabcStations (IOI20_stations)C++14
0 / 100
555 ms936 KiB
#include "stations.h" #include <bits/stdc++.h> using namespace std; const int N=1e3+10; int tmpcase1,cnt=0,root=-1; bool case1; vector<int> adj[N],lb; void labelcase1(int u,int p){ lb[u]=cnt++; for(int i=0;i<adj[u].size();i++){ if(adj[u][i]!=p) labelcase1(adj[u][i],u); } } void labelcase3(int u,int p){ lb[u]=cnt; bool next=false; for(int i=0;i<adj[u].size();i++){ if(adj[u][i]!=p){ next=true; cnt++; labelcase3(adj[u][i],u); } } if(!next) cnt+=999; } vector<int> label(int n, int k, vector<int> u, vector<int> v) { lb.resize(n); bool case2=true; cnt=0,case1=true; for(int i=0;i<n-1;i++){ adj[u[i]].push_back(v[i]); adj[v[i]].push_back(u[i]); if(min(u[i],v[i])!=i/2 || max(u[i],v[i])!=i+1) case2=false; } if(case2){ for(int i=0;i<n;i++) lb[i]=i; for(int i=0;i<n;i++) adj[i].clear(); return lb; } for(int i=0;i<n;i++){ if(adj[i].size()==1) tmpcase1=i; if(adj[i].size()>2) case1=false,root=i; } if(case1) labelcase1(tmpcase1,-1); else labelcase3(root,-1); /*case2 for(int i=0;i<n;i++) lb[i]=i;*/ for(int i=0;i<n;i++) adj[i].clear(); /*for(int i=0;i<lb.size();i++) cout<<lb[i] <<" "; cout<<"\n\n\n";*/ return lb; } int find_next_station(int s, int t, vector<int> c) { bool case2=false; if(c.size()==1 && c[0]==(s+1)/2) case2=true; if(c.size()==2 && c[0]==(s+1)*2 && c[1]==(s+1)*2+1) case2=true; if(c.size()==3 && c[0]==(s+1)/2 && c[1]==(s+1)*2 && c[2]==(s+1)*2+1) case2=true; /*case1 if(c.size()==1) return c[0]; if(s<t) return max(c[0],c[1]); return min(c[0],c[1]);*/ if(case2){ int cnts=0,cntt=0,tmps=s+1,tmpt=t+1; s++,t++; while(tmps!=0) cnts++,tmps/=2; while(tmpt!=0) cntt++,tmpt/=2; if(cnts>cntt) return (s/2)-1; if(cntt>cnts){ while(true){ if(t==s*2) return s*2-1; if(t==s*2+1) return s*2; if(t==s || t<s) return s/2-1; t/=2; } } return s/2-1; } int ind; if(c.size()==1) return c[0]; if(c.size()>2){ ind=upper_bound(c.begin(),c.end(),t)-c.begin()-1; return c[ind]; } if(abs(t-s)>=1000 || t<s) return c[0]; return c[1]; }

Compilation message (stderr)

stations.cpp: In function 'void labelcase1(int, int)':
stations.cpp:11:15: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   11 |  for(int i=0;i<adj[u].size();i++){
      |              ~^~~~~~~~~~~~~~
stations.cpp: In function 'void labelcase3(int, int)':
stations.cpp:18:15: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   18 |  for(int i=0;i<adj[u].size();i++){
      |              ~^~~~~~~~~~~~~~
#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...