Submission #140417

#TimeUsernameProblemLanguageResultExecution timeMemory
140417MvCIdeal city (IOI12_city)C++11
55 / 100
180 ms4348 KiB
#pragma GCC target("avx2") #pragma GCC optimization("O3") #pragma GCC optimization("unroll-loops") #include<bits/stdc++.h> //#include "job.h" #define rc(x) return cout<<x<<endl,0 #define pb push_back #define mkp make_pair #define in insert #define er erase #define fd find #define fr first #define sc second typedef long long ll; typedef long double ld; const ll INF=0x3f3f3f3f3f3f3f3f; const ll llinf=(1LL<<62); const int inf=(1<<30); const int nmax=1e5+50; const ll mod=1e9; using namespace std; int dx[]={-1,0,0,1},dy[]={0,-1,1,0}; int i,j,a,b,x[nmax],y[nmax],di[nmax],vz[nmax],n,rs,sx,sy; vector<int>g[nmax]; queue<int>q; map<pair<int,int>,int>mp; void ad(int &x,int y) { x+=y; if(x>=mod)x-=mod; if(x<0)x+=mod; } void rec(int a,int b) { int c=mp[mkp(a,b)],d; if(vz[c])return; vz[c]=1; for(int i=0;i<4;i++) { d=mp[mkp(a+dx[i],b+dy[i])]; if(!d)continue; g[c].pb(d); rec(a+dx[i],b+dy[i]); } } int DistanceSum(int N,int X[],int Y[]) { n=N; for(i=1;i<=n;i++) { x[i]=X[i-1],y[i]=Y[i-1]; if(n<=2000)mp[mkp(x[i],y[i])]=i; } if(n<=2000) { rec(x[1],y[1]); for(i=1;i<=n;i++) { while(!q.empty())q.pop(); q.push(i); for(j=1;j<=n;j++)vz[j]=di[j]=0; vz[i]=1; while(!q.empty()) { a=q.front(); q.pop(); if(a>i)ad(rs,di[a]); for(j=0;j<g[a].size();j++) { b=g[a][j]; if(!vz[b]) { vz[b]=1; q.push(b); di[b]=di[a]+1; } } } } } else { sort(x+1,x+n+1); sort(y+1,y+n+1); for(i=1;i<=n;i++) { ad(sx,x[i]); ad(sy,y[i]); } for(i=n;i>=1;i--) { ad(rs,((1LL*x[i]*i%mod)-sx+mod)%mod); ad(rs,((1LL*y[i]*i%mod)-sy+mod)%mod); ad(sx,-x[i]); ad(sy,-y[i]); } } return rs; } /*int main() { //freopen("sol.in","r",stdin); //freopen("sol.out","w",stdout); //mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); ios_base::sync_with_stdio(false);cin.tie(0);cerr.tie(0);cout.tie(0); cin>>n; for(i=1;i<=n;i++) { cin>>x[i]>>y[i]; mp[mkp(x[i],y[i])]=i; } rec(x[1],y[1]); if(n<=2000) { for(i=1;i<=n;i++) { while(!q.empty())q.pop(); q.push(i); for(j=1;j<=n;j++)vz[j]=di[j]=0; vz[i]=1; while(!q.empty()) { a=q.front(); q.pop(); if(a>i)ad(rs,di[a]); for(j=0;j<g[a].size();j++) { b=g[a][j]; if(!vz[b]) { vz[b]=1; q.push(b); di[b]=di[a]+1; } } } } } else { sort(x+1,x+n+1); sort(y+1,y+n+1); for(i=1;i<=n;i++) { ad(sx,x[i]); ad(sy,y[i]); } for(i=n;i>=1;i--) { ad(rs,((x[i]*i%mod)-sx+mod)%mod); ad(rs,((y[i]*i%mod)-sy+mod)%mod); ad(sx,-x[i]); ad(sy,-y[i]); } } cout<<rs<<endl; 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 */

Compilation message (stderr)

city.cpp:2:0: warning: ignoring #pragma GCC optimization [-Wunknown-pragmas]
 #pragma GCC optimization("O3")
 
city.cpp:3:0: warning: ignoring #pragma GCC optimization [-Wunknown-pragmas]
 #pragma GCC optimization("unroll-loops")
 
city.cpp:159:1: warning: "/*" within comment [-Wcomment]
 /*
  
city.cpp: In function 'int DistanceSum(int, int*, int*)':
city.cpp:68:14: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(j=0;j<g[a].size();j++)
             ~^~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...