# | Submission time | Handle | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
308609 | 2020-10-01T15:05:09 Z | Peacher29 | Stations (IOI20_stations) | C++14 | 0 ms | 0 KB |
#include "stations.h" #include <bits/stdc++.h> using namespace std; class pont{ public: vector<int> v; int id; bool volt = 0; bool mely; void dfs(bool mely); }; vector<pont> p; int dd = -1; void pont::dfs(bool mely){ if(!volt){ this->mely=mely; volt=1; if(mely) id=++dd; for(int i : v){ p[i].dfs(!mely); } if(!mely) id=++dd; } } vector<int> label(int n, int k, vector<int> u, vector<int> v) { dd=-1; p.clear(); p.resize(n); for(int i=0;i<n-1;i++){ p[u[i]].v.push_back(v[i]); p[v[i]].v.push_back(u[i]); } p[0].dfs(0); vector<int> er(n); for(int i=0;i<n;i++){ er[i] = p[i].mely*2000+p[i].id; } return er; } bool contains(int mi, int mit){ return mi/2000 <= mit/2000 && mit%2000 <= mi%2000; } int find_next_station(int s, int t, vector<int> c) { sort(c.begin(), c.end()); for(int i : c){ if(i==t) return t; } if(s/2000){ if(t%2000<s%2000 || (c.size()>1 && c[c.size()-2]%2000 < t%2000)){ return c.back(); } else { for(int i=1;i<c.size()-1; i++){ if(t%2000<c[i]%2000){ return c[i]; } } exit(255); //return c[c.size()-2]; } } else { if(s%2000<t%2000 || (t%2000 < c[0]%2000)){ return c[0]; } else { for(int i=0;i<c.size(); i++){ if(t%2000<c[i]%2000){ return c[i-1]; } } exit(255); //return c[c.size()-1]; } } } int main(){ int m; while(1){ cin >> m; cout << find_next_station(10,m,{2000,2009}); } return 0; }