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;
typedef int64_t llo;
#define mp make_pair
#define pb push_back
#define a first
#define b second
//#define endl '\n'
int n;
map<pair<int,int>,int> aa;
vector<int> xx={0,1,0,-1};
vector<int> yy={1,0,-1,0};
int DistanceSum(int nn, int x[], int y[]) {
n=nn;
for(int i=0;i<n;i++){
aa[{x[i],y[i]}]=1;
}
llo ans=0;
for(int i=0;i<n;i++){
map<pair<int,int>,int> dist;
dist[{x[i],y[i]}]=0;
priority_queue<pair<int,pair<int,int>>> ac;
ac.push({0,{x[i],y[i]}});
while(ac.size()){
pair<int,pair<int,int>> tt=ac.top();
ac.pop();
tt.a*=(-1);
// cout<<tt.a<<","<<tt.b.a<<","<<tt.b.b<<endl;
for(int j=0;j<4;j++){
if(aa.find({tt.b.a+xx[j],tt.b.b+yy[j]})==aa.end()){
continue;
}
if(dist.find({tt.b.a+xx[j],tt.b.b+yy[j]})!=dist.end()){
if(dist[{tt.b.a+xx[j],tt.b.b+yy[j]}]>tt.a+1){
dist[{tt.b.a+xx[j],tt.b.b+yy[j]}]=tt.a+1;
ac.push({-tt.a-1,{tt.b.a+xx[j],tt.b.b+yy[j]}});
}
}
else{
dist[{tt.b.a+xx[j],tt.b.b+yy[j]}]=tt.a+1;
ac.push({-tt.a-1,{tt.b.a+xx[j],tt.b.b+yy[j]}});
}
}
}
for(int j=0;j<n;j++){
ans+=dist[{x[j],y[j]}];
}
// cout<<i<<endl;
}
ans/=2;
ans%=((llo)1e9);
int ans2=ans;
return ans2;
return 0;
}
/*
11
2 5
2 6
3 3
3 6
4 3
4 4
4 5
4 6
5 3
5 4
5 6
*/
/*
g++ -DEVAL -Wall -static -O2 -o aa grader.cpp city.cpp
*/
# | 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... |