제출 #316841

#제출 시각아이디문제언어결과실행 시간메모리
316841amunduzbaev이상적인 도시 (IOI12_city)C++14
32 / 100
168 ms16208 KiB
//#include "grader.cpp" #include <bits/stdc++.h> using namespace std; #define ll long long #define pb push_back const int N=2005, mod= 1e9; int n, dist[N][N]; vector<vector<int>> edges(2005); void Dijkstra(int cur){ queue<int>q; q.push(cur); while(!q.empty()){ int u=q.front(); q.pop(); for(auto x:edges[u]){ if(dist[cur][u]+1 < dist[cur][x]){ dist[cur][x] = dist[cur][u]+1; q.push(x); } } } } const int NAX = 1e5+5; int sufx[NAX], sufy[NAX]; int DistanceSum(int N, int *x, int *y) { n=N; if(n<=2000){ for(int i=0;i<n;i++){ for(int j=i+1;j<n;j++){ dist[i][j]=2e9; dist[j][i]=2e9; if(abs(x[i]-x[j]) + abs(y[i]-y[j]) == 1){ edges[i].pb(j); edges[j].pb(i); } } } for(int i=0;i<n;i++) Dijkstra(i); ll ans=0; for(int i=0; i<n; i++){ for(int j=i+1; j<n; j++){ ans += dist[i][j]; ans %= mod; } } return ans; } else{ sort(x,x+n); sort(y,y+n); for(int i=n-2; i>=0; i--){ sufx[i] += sufx[i+1] + x[i+1]; sufy[i] += sufy[i+1] + y[i+1]; } for(int i=0;i<n;i++){ cout<<sufx[i]<<" "; }cout<<"\n"; for(int i=0;i<n;i++){ cout<<sufy[i]<<" "; }cout<<"\n"; ll ans=0; for(int i=0;i<n;i++){ int cur=x[i]*(n-i-1); ans+=(sufx[i]-cur); ans%=mod; } for(int i=0;i<n;i++){ int cur=y[i]*(n-i-1); ans+=(sufy[i]-cur); ans%=mod; } return ans; } } /* 11 2 5 2 6 3 3 3 6 4 3 4 4 4 5 4 6 5 3 5 4 5 6 15 3 1 4 1 2 2 3 2 4 2 5 2 1 3 2 3 3 3 4 3 5 3 2 4 3 4 4 4 5 4 */
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...