This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include<bits/stdc++.h>
using namespace std;
#define MAXN2 2000
#define MOD 1000000000
#define mp make_pair
#define pint pair<int, int>
#define f first
#define s second
bool city[MAXN2+2][MAXN2+2];
int dis[MAXN2+2][MAXN2+2];
int DistanceSum(int N, int X[], int Y[]) {
if(N>2000) return 0;
long long ans=0;
queue<pint > q;
int minx=X[0], miny=Y[0];
for(int i=1; i<N; i++) minx=min(minx, X[i]), miny=min(miny, Y[i]);
for(int i=0; i<N; i++) X[i]-=minx-1, Y[i]-=miny-1;
for(int i=0; i<N; i++) city[X[i]][Y[i]]=true;
for(int i=0; i<N; i++){
for(int j=0; j<N; j++) dis[X[j]][Y[j]]=-1;
dis[X[i]][Y[i]]=0;
q.push(mp(X[i], Y[i]));
while(!q.empty()){
int x=q.front().f, y=q.front().s;
q.pop();
ans+=dis[x][y];
if(city[x-1][y]&&dis[x-1][y]==-1) dis[x-1][y]=dis[x][y]+1, q.push(mp(x-1, y));
if(city[x+1][y]&&dis[x+1][y]==-1) dis[x+1][y]=dis[x][y]+1, q.push(mp(x+1, y));
if(city[x][y-1]&&dis[x][y-1]==-1) dis[x][y-1]=dis[x][y]+1, q.push(mp(x, y-1));
if(city[x][y+1]&&dis[x][y+1]==-1) dis[x][y+1]=dis[x][y]+1, q.push(mp(x, y+1));
}
//printf("[%lld]\n", ans);
}
return ans/2;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |