Submission #883479

#TimeUsernameProblemLanguageResultExecution timeMemory
883479ono_de206Rail (IOI14_rail)C++14
56 / 100
405 ms98896 KiB
#include "rail.h"
#include<bits/stdc++.h>
using namespace std;

#define in insert
#define all(x) x.begin(),x.end()
#define pb push_back
#define eb emplace_back
#define ff first
#define ss second

//#define int long long

typedef long long ll;
typedef vector<int> vi;
typedef set<int> si;
typedef multiset<int> msi;
typedef pair<int, int> pii;
typedef vector<pii> vpii;

void findLocation(int n, int first, int pos[], int tp[]) {
	pos[0] = first;
	tp[0] = 1;

	vector<vector<int>> dis(n, vector<int>(n, -1));

	auto get = [&](int x, int y) -> int {
		if(x > y) swap(x, y);
		if(dis[x][y] != -1) return dis[x][y];
		return dis[x][y] = getDistance(x, y);
	};

	for(int i = 1; i < n; i++)  {
		if(tp[i] != 0) continue;
		vector<int> lol;
		for(int j = 1; j < n; j++) {
			if(i == j) continue;
			if(get(0, i) == get(0, j) + get(j, i)) lol.pb(j);
		}
		int x = first, ls = 0, k = 0;
		lol.pb(i);
		sort(all(lol), [&](int ii, int jj) {
			return get(0, ii) < get(0, jj);
		});
		for(int y : lol) {
			if(k) {
				x -= get(ls, y);
			} else {
				x += get(ls, y);
			}
			ls = y;
			k ^= 1;
			pos[i] = x;
			tp[i] = k + 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...