Submission #18840

#TimeUsernameProblemLanguageResultExecution timeMemory
18840ggohIdeal city (IOI12_city)C++98
32 / 100
203 ms22092 KiB
#include<cstdio> #include<map> #include<queue> int a,x,y,p,q,i,j,dx[]={1,0,-1,0},dy[]={0,1,0,-1}; long long sum,mod=1e9; bool m[2002][2002]; std::queue<int>P,Q; int DistanceSum (int N, int *X, int *Y) { a=N; x=2147483647;y=2147483647; for(i=0;i<a;i++)x=std::min(x,X[i]),y=std::min(y,Y[i]); for(i=0;i<a;i++)X[i]-=x,Y[i]-=y,m[X[i]][Y[i]]=1; if(a<=2000) { int D[2002][2002]; for(i=0;i<a;i++) { P.push(X[i]); Q.push(Y[i]); for(j=0;j<a;j++)D[X[j]][Y[j]]=0; D[X[i]][Y[i]]=1;sum++; while(!P.empty()) { p=P.front();P.pop();q=Q.front();Q.pop(); for(int k=0;k<4;k++) { x=p+dx[k];y=q+dy[k]; if(x>=0&&y>=0&&m[x][y]&&D[x][y]==0) { D[x][y]=D[p][q]+1; sum+=D[x][y]; P.push(x);Q.push(y); } } } sum-=a; } sum/=(long long)2; } else { long long xsum[100002]={},ysum[100002]={}; long long xx,yy; for(i=0;i<a;i++) { xsum[X[i]]++;ysum[Y[i]]++; } xx=xsum[0];yy=ysum[0]; for(i=1;i<a;i++) { sum+=xx*(long long)xsum[i]; xsum[i]+=xsum[i-1]; xx+=xsum[i]; sum+=yy*(long long)ysum[i]; ysum[i]+=ysum[i-1]; yy+=ysum[i]; } sum/=(long long)2; } return sum%mod; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...