제출 #889208

#제출 시각아이디문제언어결과실행 시간메모리
889208Faisal_SaqibShortcut (IOI16_shortcut)C++17
38 / 100
736 ms32340 KiB
#pragma once #include <vector> #include <set> #include <iostream> using namespace std; long long pre[1000]; long long mxp[1000][1000]; long long mip[1000][1000]; long long dist(int&i,int&j) { return abs(pre[j]-pre[i]); } long long find_shortcut(int n,vector<int> l,vector <int> d, int c) { for(int i=1;i<n;i++) pre[i]=pre[i-1]+l[i-1]; for(int i=0;i<n;i++) { mxp[i][i]=pre[i]+d[i]; mip[i][i]=pre[i]-d[i]; for(int j=i+1;j<n;j++) { mxp[i][j]=max(mxp[i][j-1],pre[j]+d[j]); mip[i][j]=min(mip[i][j-1],pre[j]-d[j]); } } long long ans=1e18; for(int i=0;i<n;i++) { for(int j=i+1;j<n;j++) { long long cur=0; int bl=-1; int br=n; for(int i1=0;i1<n;i1++) { br=n; while(bl+1<br) { int mid=(br+bl)/2; if(dist(i1,mid)<=(c+dist(i1,i)+dist(j,mid))) { bl=mid; } else { br=mid; } } if(i1+1 <= bl) { cur=max(cur,mxp[i1+1][bl]-pre[i1]+d[i1]); } if(bl+1 < n) { if((bl+1)<=j) { cur=max(cur,c+d[i1]+dist(i1,i)+pre[j]-mip[bl+1][j]); } if((j+1)<n) { cur=max(cur,c+d[i1]+dist(i1,i)+mxp[j+1][n-1]-pre[j]); } } } ans=min(ans,cur); } } return ans; }

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

shortcut.cpp:1:9: warning: #pragma once in main file
    1 | #pragma once
      |         ^~~~
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...