제출 #762006

#제출 시각아이디문제언어결과실행 시간메모리
762006aihaySky Walking (IOI19_walk)C++14
24 / 100
4070 ms532588 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; LL n,m,s,g,x[100010],h[100010],l[100010],r[100010],y[100010],idxx; pair<LL,LL> srtb[100010]; pair<LL,pair<LL,LL>> srts[100010]; LL cst[1000010]; vector<LL> v[5000010]; map<pair<LL,LL>,LL> mp; map<LL,LL> comp; LL dcomp[100010]; pair<LL,LL> inter[5000010]; LL dijk(){ for(int i=0;i<idxx;i++) cst[i]=MAAX; priority_queue<pair<LL,LL>> pq; pq.push({0,mp[{x[s],0}]}); while(pq.size()){ LL cost=-pq.top().F,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++){ LL x1=inter[idx].F,x2=inter[v[idx][i]].F; LL y1=inter[idx].S,y2=inter[v[idx][i]].S; LL ncst=cost+abs(x2-x1)+abs(y2-y1); LL 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]; comp[x[i]]=i; h[i]=H[i]; vec[x[i]].PB(0); srtb[i]={-h[i],x[i]}; } sort(srtb,srtb+n); 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++){ srtb[i].F*=-1; 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]; srts[i]={-y[i],{x[l[i]],x[r[i]]}}; } sort(srts,srts+m); set<int> curst; int idx=0; for(int i=0;i<m;i++){ srts[i].F=-srts[i].F; while(idx<n&&srtb[idx].F>=srts[i].F) curst.insert(srtb[idx++].S); int lst=-1; for(set<int>::iterator j=curst.lower_bound(srts[i].S.F);j!=curst.end()&&(*j)<=srts[i].S.S;j++){ if(mp[{(*j),srts[i].F}]==0){ mp[{(*j),srts[i].F}]=idxx++; inter[idxx-1]={(*j),srts[i].F}; } if(~lst){ v[mp[{lst,srts[i].F}]].PB(mp[{(*j),srts[i].F}]); v[mp[{(*j),srts[i].F}]].PB(mp[{lst,srts[i].F}]); } vec[(*j)].PB(srts[i].F); 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(); } /*int N,M,S,G; vector<int> X,H,L,R,Y; int main(){ ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0); int tc=1; // cin>>tc; while(tc--){ cin>>N>>M; for(int i=0;i<N;i++){ int x; cin>>x; X.PB(x); } for(int i=0;i<N;i++){ int x; cin>>x; H.PB(x); } for(int i=0;i<M;i++){ int x; cin>>x; L.PB(x); } for(int i=0;i<M;i++){ int x; cin>>x; R.PB(x); } for(int i=0;i<M;i++){ int x; cin>>x; Y.PB(x); } cin>>S>>G; cout<<min_distance(X,H,L,R,Y,S,G); } return 0; }*/

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

walk.cpp: In function 'LL dijk()':
walk.cpp:36:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   36 |   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:104:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  104 |   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...