제출 #140416

#제출 시각아이디문제언어결과실행 시간메모리
140416MvCIdeal city (IOI12_city)C++11
55 / 100
257 ms26232 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]; 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,((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; }

컴파일 시 표준 에러 (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: 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...