Submission #432392

#TimeUsernameProblemLanguageResultExecution timeMemory
432392idk321Stations (IOI20_stations)C++17
73.36 / 100
924 ms916 KiB
#include "stations.h" #include <vector> using namespace std; #include <bits/stdc++.h> const int M = 1000000000; const int N = 1000; int in[N]; int out[N]; vector<int> adj[N]; vector<int> labels; int n, k; int timer; int type[N]; void dfs2(int node, int par) { if (par == -1) { type[node] = 0; } else { type[node] = !type[par]; } in[node] = timer; timer++; for (int next : adj[node]) { if (next == par) continue; dfs2(next, node); } out[node] = timer; timer++; } const int add = 2000; std::vector<int> label(int n1, int k1, std::vector<int> u, std::vector<int> v) { n = n1; k = k1; labels.assign(n, 0); for (int i = 0; i < n; i++) adj[i].clear(); for (int i = 0; i < u.size(); i++) { adj[u[i]].push_back(v[i]); adj[v[i]].push_back(u[i]); } timer = 0; dfs2(0, -1); for (int i = 0; i < n; i++) { if (type[i] == 0) labels[i] = in[i] + add; else labels[i] = out[i]; } vector<int> numbers; for (int i : labels) numbers.push_back(i); sort(numbers.begin(), numbers.end()); map<int, int> turnTo; int cur = 0; for (int i : numbers) { turnTo[i] = cur; cur++; } for (int i = 0; i < labels.size(); i++) { //labels[i] = turnTo[labels[i]]; } return labels; } int find_next_station(int s, int t, std::vector<int> c) { if (t >= add) t -= add; if (s >= add) { s -= add; int par = -1; if (s != 0) { for (int next : c) { if (par < next) { par = next; } } } if (t < s) return par; int take = M; for (int next : c) { if (next == par) continue; if (next < take && next >= t) { take = next; } } if (take == M) return par; return take; } else { int par = M; for (int& next : c) { next -= add; if (next < par) par = next; } if (t > s) return par + add; vector<int> children; for (int next : c) { if (next == par) continue; children.push_back(next); } if (t <= par) return par + add; int take = -1; for (int i = 0; i < children.size(); i++) { if (children[i] > t) break; take = i; } if (take == -1) return par + add; return children[take] + add; } return c[0]; }

Compilation message (stderr)

stations.cpp: In function 'std::vector<int> label(int, int, std::vector<int>, std::vector<int>)':
stations.cpp:59:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   59 |     for (int i = 0; i < u.size(); i++)
      |                     ~~^~~~~~~~~~
stations.cpp:88:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   88 |     for (int i = 0; i < labels.size(); i++)
      |                     ~~^~~~~~~~~~~~~~~
stations.cpp: In function 'int find_next_station(int, int, std::vector<int>)':
stations.cpp:153:27: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  153 |         for (int i = 0; i < children.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...