Submission #31108

#TimeUsernameProblemLanguageResultExecution timeMemory
31108h0ngjun7Ideal city (IOI12_city)C++14
32 / 100
156 ms21872 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...