제출 #321512

#제출 시각아이디문제언어결과실행 시간메모리
321512NachoLibre기지국 (IOI20_stations)C++14
100 / 100
1124 ms1280 KiB
#include <bits/stdc++.h> using namespace std; const int N = 1003; vector<int> v[N], dr; int tn; void sgd(int dg, int op, int dt) { if(dt & 1 ^ 1) dr[dg] = tn, ++tn; for(int i = 0; i < v[dg].size(); ++i) { if(v[dg][i] != op) { sgd(v[dg][i], dg, dt + 1); } } if(dt & 1) dr[dg] = tn, ++tn; } vector<int> label(int n, int k, vector<int> x, vector<int> y) { for(int i = 0; i < n; ++i) v[i].clear(); for(int i = 0; i < n - 1; ++i) { v[x[i]].push_back(y[i]); v[y[i]].push_back(x[i]); } dr.clear(); for(int i = 0; i < n; ++i) dr.push_back(0); tn = 0; sgd(0, -1, 0); return dr; } int find_next_station(int a, int b, vector<int> v) { int n = v.size(); if(a == 0) { sort(v.begin(), v.end()); for(int i = 0; i < n; ++i) { if(b <= v[i]) return v[i]; } assert(0); } else if(v[0] > a) { sort(v.begin(), v.end()); if(b < a) return v[n - 1]; for(int i = 0; i < n - 1; ++i) { if(b <= v[i]) return v[i]; } return v[n - 1]; } else { if(n == 1) return v[0]; sort(v.begin(), v.end()); v.push_back(v[0]); for(int i = 0; i < n; ++i) v[i] = v[i + 1]; v.pop_back(); if(b < v[0]) return v[n - 1]; if(b > a) return v[n - 1]; for(int i = 1; i < n - 1; ++i) { if(b < v[i]) return v[i - 1]; } return v[n - 2]; } } //////////// // // vector<int> ve[N], xv, yv; // // void add(int a, int b) { // xv.push_back(a); // yv.push_back(b); // ve[a].push_back(b); // ve[b].push_back(a); // } // // vector<int> drv(vector<int> v) { // for(int i = 0; i < v.size(); ++i) { // v[i] = dr[v[i]]; // } // return v; // } // // int dwb, dwm; // void sgd(int dg, int op) { // cout << dwb << " > " << dg << " = " << find_next_station(dr[dwb], dr[dg], drv(ve[dwb])) << " --> " << dr[dwm] << endl; // for(int i = 0; i < ve[dg].size(); ++i) { // if(ve[dg][i] != op) { // sgd(ve[dg][i], dg); // } // } // } // // int main() { // ios::sync_with_stdio(0); // cin.tie(0); // int n = 5; // add(0, 1); // add(0, 2); // add(1, 3); // add(1, 4); // dr = label(n, n, xv, yv); // for(dwb = 0; dwb < n; ++dwb) { // for(int i = 0; i < ve[dwb].size(); ++i) { // dwm = ve[dwb][i]; // sgd(dwm, dwb); // } // } // return 0; // dr = label(5, 4, {0, 1, 1, 2}, {1, 2, 3, 4}); // cout << find_next_station(dr[2], dr[0], {dr[1], dr[4]}) << " --> " << dr[1] << endl; // cout << find_next_station(dr[1], dr[3], {dr[3], dr[2], dr[0]}) << " --> " << dr[3] << endl; // cout << find_next_station(dr[4], dr[3], {dr[2]}) << " --> " << dr[2] << endl; // return 0; // }

컴파일 시 표준 에러 (stderr) 메시지

stations.cpp: In function 'void sgd(int, int, int)':
stations.cpp:9:8: warning: suggest parentheses around arithmetic in operand of '^' [-Wparentheses]
    9 |  if(dt & 1 ^ 1) dr[dg] = tn, ++tn;
      |     ~~~^~~
stations.cpp:10:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   10 |  for(int i = 0; i < v[dg].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...