Submission #1243761

#TimeUsernameProblemLanguageResultExecution timeMemory
1243761santi3223Ideal city (IOI12_city)C++20
11 / 100
1095 ms3772 KiB
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define vb vector<bool>
#define pb push_back
#define ff(aa, bb, cc) for(ll aa = bb; aa < cc; aa++)
#define vl vector<ll>
#define pll pair<ll, ll>
#define fi first
#define se second
#define ed "\n"
#define all(aaa) aaa.begin(), aaa.end()
#define rall(aaa) aaa.rbegin(), aaa.rend()
ll MOD = 1000000000;

map<pll, ll> dist;
map<pll, bool> exists;

void flood(int x, int y, int sum){
	//cout << x << " "<< y << ed;
	if(!exists[{x, y}]){
		return;
	}
	if(sum >= dist[{x, y}]){
		//cout << "SUM MORE " <<  sum << " " << dist[{x, y}] << ed;
		return;
	}
	dist[{x, y}] = sum;
	if(exists[{x-1, y}]){
		flood(x-1, y, sum+1);
	}
	if(exists[{x+1, y}]){
		flood(x+1, y, sum+1);
	}
	if(exists[{x, y+1}]){
		flood(x, y+1, sum+1);
	}
	if(exists[{x, y-1}]){
		flood(x, y-1, sum+1);
	}
}

int DistanceSum(int n, int *X, int *Y){
	vector<pll> coords;
	ff(i, 0, n){
		coords.pb({X[i], Y[i]});
		exists[{X[i], Y[i]}] = true;
	}
	ll c = 0;
	ff(i, 0, n){
		ll curx = coords[i].fi, cury = coords[i].se;
		dist.clear();
		for(auto &p : exists){
			dist[{p.fi.fi, p.fi.se}] = INT_MAX;
		}
		flood(curx, cury, 0);
		//cout << "===========" << ed;
		ff(j, i+1, n){
			//cout << dist[{X[j], Y[j]}] << ed;
			c += dist[{X[j], Y[j]}] % MOD;
		}
		//cout << "===========" << ed;
		c %= MOD;
	}
	return c%MOD;

}
/*
int main() {
	ll n;
	cin >> n;
	int *x, *y;
	x = (int*) malloc(n * sizeof(int));
	y = (int*) malloc(n * sizeof(int));
	ff(i, 0, n){
		cin >> x[i] >> y[i];
	}
	ll res = DistanceSum(n, x, y);
	cout << res << ed;
	return 0;

}
*/
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...