제출 #99592

#제출 시각아이디문제언어결과실행 시간메모리
99592KLPPShortcut (IOI16_shortcut)C++14
71 / 100
2044 ms1792 KiB
#include "shortcut.h" #include<bits/stdc++.h> using namespace std; typedef long long int lld; long long find_shortcut(int n, std::vector<int> l, std::vector<int> d, int c) { lld lo,hi; lo=-1; hi=1000000000000000; lld level[n]; level[0]=0; for(int i=1;i<n;i++)level[i]=level[i-1]+l[i-1]; while(hi-lo>1){ lld mid=(hi+lo)/2; lld min_sum,max_sum; lld min_diff,max_diff; min_sum=0; min_diff=0; max_sum=1000000000000000; max_diff=1000000000000000; for(int i=0;i<n;i++){ for(int j=i+1;j<n;j++){ lld D=level[j]-level[i]; if(D+d[i]+d[j]>mid){ lld u=mid-d[i]-d[j]-c; min_sum=max(min_sum,level[i]+level[j]-u); min_diff=max(min_diff,level[j]-level[i]-u); max_sum=min(max_sum,level[i]+level[j]+u); max_diff=min(max_diff,level[j]-level[i]+u); } } } bool b=false; for(int i=0;i<n;i++){ for(int j=i+1;j<n;j++){ if(level[i]+level[j]>=min_sum && level[i]+level[j]<=max_sum && level[j]-level[i]<=max_diff && level[j]-level[i]>=min_diff){ b=true; } } } if(b)hi=mid; else lo=mid; } return hi; }
#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...