Submission #98194

#TimeUsernameProblemLanguageResultExecution timeMemory
98194E869120Ideal city (IOI12_city)C++14
32 / 100
173 ms1260 KiB
#include <bits/stdc++.h>
using namespace std;

vector<int> G[2009]; int dist[2009], mod = 1000000000;

int DistanceSum(int N, int *X, int *Y) {
	for (int i = 0; i < N; i++) {
		for (int j = 0; j < N; j++) {
			int V = abs(X[i] - X[j]) + abs(Y[i] - Y[j]);
			if (V == 1) G[i].push_back(j);
		}
	}
	
	int sum = 0;
	for (int i = 0; i < N; i++) {
		for (int j = 0; j < N; j++) dist[j] = 10000;
		
		queue<int> que; que.push(i); dist[i] = 0;
		while (!que.empty()) {
			int pos = que.front(); que.pop();
			for (int j = 0; j < (int)G[pos].size(); j++) {
				if (dist[G[pos][j]] > dist[pos] + 1) {
					dist[G[pos][j]] = dist[pos] + 1;
					que.push(G[pos][j]);
				}
			}
		}
		for (int j = i + 1; j < N; j++) { sum += dist[j]; sum %= mod; }
	}
	return sum;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...