Submission #580282

#TimeUsernameProblemLanguageResultExecution timeMemory
580282pirhosigStations (IOI20_stations)C++17
0 / 100
936 ms664 KiB
#include "stations.h"
#include <bits/stdc++.h>
#define  R(a) for (int i = 0; i < a; ++i)
#define RR(a) for (int j = 0; j < a; ++j)
using namespace std;



void name(vector<int> adj[], vector<int>& val, int& cont, bool even, int p, int n) {
	if (!even) val[n] = cont++;
	for (int a : adj[n]) {
		if (a != p) name(adj, val, cont, !even, n, a);
	}
	if (even) val[n] = cont++;
}




vector<int> label(int n, int k, vector<int> u, vector<int> v) {
	vector<int> adj[n];
	R(n - 1) {
		adj[u[i]].push_back(v[i]);
		adj[v[i]].push_back(u[i]);
	}
	vector<int> ret(n);
	int cont = 0;
	name(adj, ret, cont, false, -1, 0);
	// cerr << "L";
	// R(n) {
	// 	cerr << " " << ret[i];
	// }
	// cerr << endl;
	return ret;
}



int find_next_station(int s, int t, vector<int> c) {
	// cerr << "S " << s << " " << t << " " << c[0] << endl;
	int m = c.size();
	if (m == 1) return c[0];

	if (s == 0) {
		for (int i = m - 1; i >= 0; --i) {
			if (c[i] >= t) return c[i];
		}
	}
	else {
		bool yea = true;
		for (int a : c) {
			if (a > s) {
				yea = false;
				break;
			}
		}
		if (yea) {
			// cerr << "V " << (c[0] < t) << (t < s) << endl;
			if (!(c[1] <= t && t < s)) return c[0];

			for (int i = 1; i < m - 1; ++i) {
				if (t < c[i + 1]) return c[i];
			}

			return c[m - 1];
		}
		else {
			if (s < t && t < c[m - 1]) {
				for (int i = m - 2; i >= 0; --i) {
					if (t <= c[i]) return c[i];
				}
			}
			return c[m - 1];
		}
	}

	return -1;
}
#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...