제출 #206432

#제출 시각아이디문제언어결과실행 시간메모리
206432autumn_eelShortcut (IOI16_shortcut)C++14
31 / 100
2084 ms632 KiB
#include "shortcut.h" #include <bits/stdc++.h> #define rep(i,n)for(int i=0;i<(n);i++) using namespace std; typedef long long ll; ll L[5000],L2[5000],R[5000],R2[5000]; ll sum[5000]; long long find_shortcut(int n, std::vector<int> l, std::vector<int> d, int c) { memset(L,0,sizeof(L)); memset(L2,0,sizeof(L2)); memset(R,0,sizeof(R)); memset(R2,0,sizeof(R2)); assert(n<=500); rep(i,n){ if(i){ L[i]=L[i-1]+l[i-1]; L2[i]=max(L2[i-1],L[i]+d[i]); } L[i]=max(L[i],(ll)d[i]); L2[i]=max(L2[i],(ll)d[i]); } for(int i=n-1;i>=0;i--){ if(i<n-1){ R[i]=R[i+1]+l[i]; R2[i]=max(R2[i+1],R[i]+d[i]); } R[i]=max(R[i],(ll)d[i]); R2[i]=max(R2[i],(ll)d[i]); } rep(i,n-1)sum[i+1]=sum[i]+l[i]; ll Min=L2[n-1]; rep(i,n)for(int j=i+1;j<n;j++){ ll Max=max({L2[i],R2[j],L[i]+c+R[j]}); for(int k=i+1;k<j;k++){ Max=max(Max,L[i]+min(c+(sum[j]-sum[k]),sum[k]-sum[i])+d[k]); Max=max(Max,R[j]+min(c+(sum[k]-sum[i]),sum[j]-sum[k])+d[k]); } int s=i+1; ll M=LLONG_MIN; multiset<ll>se; for(int k=i+1;k<j;k++){ while(s<k&&(sum[j]-sum[k])+c+(sum[s]-sum[i])<=(sum[k]-sum[s])){ M=max(M,c+(sum[s]-sum[i])+d[s]); se.erase(se.find(d[s]-sum[s])); s++; } Max=max(Max,M+d[k]+(sum[j]-sum[k])); if(!se.empty())Max=max(Max,*se.rbegin()+sum[k]+d[k]); se.insert(d[k]-sum[k]); } Min=min(Min,Max); } return Min; } #include <bits/stdc++.h> using namespace std; using ll=long long; const ll INF=1LL<<60; long long find_shortcut2(int n, std::vector<int> l, std::vector<int> d, int c) { vector<ll> sum(n); for(int i=0;i+1<n;i++){ sum[i+1]=sum[i]+l[i]; } ll mi=INF; auto dist=[&](int u,int v){return u<v?sum[v]-sum[u]:sum[u]-sum[v];}; for(int i=0;i<n;i++){ for(int j=i+1;j<n;j++){ ll ma=0; for(int k=0;k<n;k++){ for(int l=k+1;l<n;l++){ ll s=d[k]+d[l]+dist(k,l); s=min(s,dist(i,k)+dist(j,l)+c+d[k]+d[l]); ma=max(ma,s); } } mi=min(mi,ma); } } return mi; }
#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...