제출 #1220712

#제출 시각아이디문제언어결과실행 시간메모리
1220712CELD_07Stations (IOI20_stations)C++20
10 / 100
306 ms548 KiB
#include "stations.h" #pragma GCC optimize("O3") #pragma GCC optimize("unroll-loops") #include<bits/stdc++.h> #include<ext/pb_ds/assoc_container.hpp> typedef long long ll; typedef long double ld; #define endl "\n" #define vll vector<ll> #define sd second #define ft first #define all(x) x.begin(),x.end() #define allr(x) x.rbegin(),x.rend() #define pll pair<ll, ll> #define mod 1000000007 #define _set tree<pll, null_type, less<pll>, rb_tree_tag, tree_order_statistics_node_update> #define inf (ll)1e15 #define db(x) cout<<#x<<" : "<<x<<endl; #define PRESICION(x) cout.setf(ios::fixed,ios::floatfield); cout.precision(x); using namespace std; using namespace __gnu_pbds; ll dx[]={1, -1, 0, 0}; ll dy[]={0, 0, 1, -1}; inline ll sm(ll a, ll b){ return ((a%mod)+(b%mod))%mod; } inline ll ml(ll a, ll b){ return ((a%mod)*(b%mod))%mod; } inline ll rs(ll a, ll b){ return ((a%mod)-(b%mod)+mod)%mod; } ll bpow(ll a , ll b) { if (b==0)return 1; if (b%2!=0)return ((bpow(a, b-1)%mod)*(a%mod))%mod; ll r=bpow (a ,b/ 2) ; return ((r%mod)*(r%mod))%mod; } vector<vector<ll>> adj; ll cnt=0, cnt1=0; vector<ll> in, ou; vector<int> v1; inline void dfs(ll n, ll p){ in[n]=cnt; cnt++; for(auto y: adj[n]){ if(y!=p)dfs(y, n); } ou[n]=cnt1; cnt1++; } std::vector<int> label(int n, int k, std::vector<int> u, std::vector<int> v){ vector<vector<ll>>().swap(adj); vector<int>().swap(v1); vector<ll>().swap(in); vector<ll>().swap(ou); in.resize(n+1); ou.resize(n+1); v1.resize(n); adj.resize(n+1); for(int i=0; i<n-1; i++){ adj[u[i]].push_back(v[i]); adj[v[i]].push_back(u[i]); } cnt=0; dfs(0, 0); for(int i=0; i<n; i++)v1[i]=(in[i]*1000)+ou[i]; //for(int i=0; i<n; i++)cout<<i<<" "<<v1[i]<<" "<<(v1[i]/1000)<<" "<<(v1[i]%1000)<<endl; return v1; } int find_next_station(int s, int t, std::vector<int> c){ ll o=LLONG_MAX; for(int i=0; i<c.size(); i++){ if((c[i]/1000)<=(s/1000) && (c[i]%1000)>=(s%1000))o=i; } for(int i=0; i<c.size(); i++){ if(i==o)continue; if((c[i]/1000)<=(t/1000) && (c[i]%1000)>=(t%1000))return c[i]; } return c[o]; }/* int main(){ label(5, 10, {0, 1, 1, 2}, {1, 2, 3, 4}); cout<<find_next_station(4001, 11985, {2006, 5997})<<endl; }*/
#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...