Submission #942186

#TimeUsernameProblemLanguageResultExecution timeMemory
942186Nika533Shortcut (IOI16_shortcut)C++14
31 / 100
2017 ms604 KiB
#pragma GCC diagnostic warning "-std=c++11"
#include <bits/stdc++.h>
#include "shortcut.h"
#define pb push_back
#define f first
#define s second
#define MOD 1000000007
#define flush fflush(stdout)
#define all(x) (x).begin(),(x).end()
#define allr(x) (x).rbegin(), (x).rend()
#define pii pair<int,int>
using namespace std;
const int N=3005;
long long m,T,k;
long long ans;
long long pref[N]; 
long long ansPref[N],ansSuf[N];
long long find_shortcut(int n, vector<int> L, vector<int> D, int C) {
	for (int i=1; i<n; i++) pref[i]=pref[i-1]+L[i-1];
	for (int j=0; j<n; j++) {
		long long mx=0;
		for (int i=0; i<j; i++) {
			long long len=pref[j]-pref[i];
			len+=D[i]+D[j];
			mx=max(mx,len);
		}
		for (int i=j; i<n; i++) ansPref[i]=max(ansPref[i],mx);
	}
	for (int i=0; i<n; i++) {
		long long mx=0;
		for (int j=i+1; j<n; j++) {
			long long len=pref[j]-pref[i];
			len+=D[i]+D[j];
			mx=max(mx,len);
		}
		for (int j=0; j<=i; j++) ansSuf[j]=max(ansSuf[j],mx);
	}
	/*
	for (int i=0; i<n; i++) {
		for (int j=i+1; j<n; j++) {
			long long len=pref[j]-pref[i];
			len+=D[i]+D[j];
			diameter=max(diameter,len);
		}
	}
	for (int i=r; i<n; i++) {
		for (int j=i+1; j<n; j++) {
			long long len=pref[j]-pref[i];
			len+=D[i]+D[j];
			diameter=max(diameter,len);
		}
	}
	*/
	ans=1e18;
	for (int l=0; l<n; l++) {
		for (int r=l+1; r<n; r++) {
			long long LEN=0;
			for (int o=l; o<r; o++) LEN+=L[o];
			vector<long long> dd;
			for (auto x:D) dd.pb(x);
			long long sum1=0,sum2=0;
			for (int i=l-1; i>=0; i--) {
				sum1+=L[i];
				dd[l]=max(dd[l],sum1+D[i]);
			}
			for (int i=r+1; i<n; i++) {
				sum2+=L[i-1];
				dd[r]=max(dd[r],sum2+D[i]);
			}
			long long diameter=0;
			for (int i=l; i<=r; i++) {
				for (int j=i+1; j<=r; j++) {
					long long len=pref[j]-pref[i];
					len=min(len,LEN-len+C);
					len+=dd[i]+dd[j];
					diameter=max(diameter,len);
				}
			}
			diameter=max(diameter,max(ansPref[l],ansSuf[r]));
			ans=min(ans,diameter);
			//cout<<l<<" "<<r<<" "<<diameter<<endl<<ansPref[l]<<" "<<ansSuf[r]<<endl;
		}
	}
	return ans;
}

Compilation message (stderr)

shortcut.cpp:1:32: warning: '-std=c++11' is not an option that controls warnings [-Wpragmas]
    1 | #pragma GCC diagnostic warning "-std=c++11"
      |                                ^~~~~~~~~~~~
#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...