Submission #562576

#TimeUsernameProblemLanguageResultExecution timeMemory
562576Leo121Ideal city (IOI12_city)C++14
11 / 100
1098 ms1748 KiB
#include <bits/stdc++.h> #define forn(i, a, b) for(int i = int (a); i <= int(b); ++ i) #define fora(i, a, b) for(int i = int (a); i >= int(b); -- i) #define pb push_back #define fi first #define se second #define mp make_pair using namespace std; typedef pair<int, int> pii; typedef long long ll; int mx[4] = {0, 0, 1, -1}; int my[4] = {1, -1, 0, 0}; map<pii, pii> mapa; queue<pii> q; int mod = 1e9; int res = 0; void bfs(int ind){ pii act; while(!q.empty()){ act = q.front(); q.pop(); forn(i, 0, 3){ if(mapa.count(mp(act.fi + mx[i], act.se + my[i]))){ if(mapa[mp(act.fi + mx[i], act.se + my[i])].fi == -1){ mapa[mp(act.fi + mx[i], act.se + my[i])].fi = mapa[mp(act.fi, act.se)].fi + 1; if(mapa[mp(act.fi + mx[i], act.se + my[i])].se > ind){ res += mapa[mp(act.fi + mx[i], act.se + my[i])].fi; res %= mod; } q.push(mp(act.fi + mx[i], act.se + my[i])); } } } } } int DistanceSum(int N, int *X, int *Y) { forn(i, 0, N - 1){ mapa[mp(X[i], Y[i])] = mp(0, i); forn(j, 0, N - 1){ if(j != i){ mapa[mp(X[j], Y[j])] = mp(-1, j); } } q.push(mp(X[i], Y[i])); bfs(i); } return res; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...