제출 #761514

#제출 시각아이디문제언어결과실행 시간메모리
761514aihaySky Walking (IOI19_walk)C++14
10 / 100
4081 ms545296 KiB
#include <bits/stdc++.h> using namespace std; typedef long long LL; #define F first #define S second #define PB push_back #define FR(i,a,b) for(int i=(a);i<(b);i++) #define FOR(i,n) FR(i,0,n) #define SZ(x) int(x.size()) const LL MAAX=1e18; const int MOD=1e9+7; const int MAX=1e9; int n,m,s,g,x[100010],h[100010],l[100010],r[100010],y[100010],idxx; LL cst[1000010]; vector<int> v[5000010]; map<pair<LL,LL>,int> mp; pair<LL,LL> inter[5000010]; LL dijk(){ for(int i=0;i<idxx;i++) cst[i]=MAAX; priority_queue<pair<LL,int>> pq; pq.push({0,mp[{x[s],0}]}); while(pq.size()){ LL cost=-pq.top().F; int idx=pq.top().S; pq.pop(); if(cost>cst[idx]) continue; cst[idx]=cost; if(idx==mp[{x[g],0}]) break; for(int i=0;i<v[idx].size();i++){ int x1=inter[idx].F,x2=inter[v[idx][i]].F; int y1=inter[idx].S,y2=inter[v[idx][i]].S; LL ncst=cost+abs(x2-x1)+abs(y2-y1); int nidx=v[idx][i]; if(ncst<cst[nidx]){ cst[nidx]=ncst; pq.push({-ncst,nidx}); } } } if(cst[mp[{x[g],0}]]==MAAX) cst[mp[{x[g],0}]]=-1; return cst[mp[{x[g],0}]]; } map<int,vector<int>> vec; LL min_distance(vector<int> X,vector<int> H,vector<int> L,vector<int> R,vector<int> Y,int S,int G){ n=X.size(); m=L.size(); s=S,g=G; for(int i=0;i<n;i++){ x[i]=X[i]; h[i]=H[i]; vec[x[i]].PB(0); } mp[{x[s],0}]=idxx++; inter[0]={x[s],0}; mp[{x[g],0}]=idxx++; inter[1]={x[g],0}; for(int i=0;i<n;i++){ if(mp[{x[i],0}]==0){ mp[{x[i],0}]=idxx++; inter[idxx-1]={x[i],0}; } } for(int i=0;i<m;i++){ l[i]=L[i]; r[i]=R[i]; y[i]=Y[i]; int lst=-1; for(int j=l[i];j<=r[i];j++){ if(h[j]<y[i]) continue; if(mp[{x[j],y[i]}]==0){ mp[{x[j],y[i]}]=idxx++; inter[idxx-1]={x[j],y[i]}; } if(~lst){ v[mp[{x[lst],y[i]}]].PB(mp[{x[j],y[i]}]); v[mp[{x[j],y[i]}]].PB(mp[{x[lst],y[i]}]); } vec[x[j]].PB(y[i]); lst=j; } } for(int i=0;i<n;i++){ sort(vec[x[i]].begin(),vec[x[i]].end()); for(int j=1;j<vec[x[i]].size();j++){ v[mp[{x[i],vec[x[i]][j]}]].PB(mp[{x[i],vec[x[i]][j-1]}]); v[mp[{x[i],vec[x[i]][j-1]}]].PB(mp[{x[i],vec[x[i]][j]}]); } } return dijk(); }

컴파일 시 표준 에러 (stderr) 메시지

walk.cpp: In function 'LL dijk()':
walk.cpp:33:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   33 |   for(int i=0;i<v[idx].size();i++){
      |               ~^~~~~~~~~~~~~~
walk.cpp: In function 'LL min_distance(std::vector<int>, std::vector<int>, std::vector<int>, std::vector<int>, std::vector<int>, int, int)':
walk.cpp:90:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   90 |   for(int j=1;j<vec[x[i]].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...
#Verdict Execution timeMemoryGrader output
Fetching results...