Submission #21179

#TimeUsernameProblemLanguageResultExecution timeMemory
21179sbansalcsShortcut (IOI16_shortcut)C++14
31 / 100
2000 ms41084 KiB
#include "shortcut.h"
#include <iostream>
#include <assert.h>
const int N = 1e6+2;
typedef long long ll;
using namespace std;
ll dp1[N],dp2[N];
ll dp3[N],dp4[N];
ll sums[N];
long long find_shortcut(int n, std::vector<int> l, std::vector<int> d, int c)
{	
	for(int i=0;i<n;i++)	{
		if(i==0)	dp1[i]=d[i];
		else	dp1[i]=max((ll)d[i],dp1[i-1]+l[i-1]);
	}
	for(int i=n-1;i>=0;i--)	{
		if(i==n-1)	dp2[i]=d[i];
		else	dp2[i]=max((ll)d[i],dp2[i+1]+l[i]);
	}
	for(int i=0;i<n;i++)	{
		if(i==0)	dp3[i]=d[i];
		else	dp3[i]=max(dp3[i-1],d[i]+l[i-1]+dp1[i-1]);	
	}
	for(int i=n-1;i>=0;i--)	{
		if(i==n-1)	dp4[i]=d[i];
		else	dp4[i]=max(dp4[i+1],l[i]+dp2[i+1]+d[i]);
	}
	for(int i=1;i<n;i++)	{
		sums[i]=l[i-1]+sums[i-1];
	}
	// for(int i=0;i<n;i++)	{
	// 	cout<<i<<" : "<<dp3[i]<<" , "<<dp4[i]<<endl;
	// }
	ll ans=dp3[n-1];
	ll lx;
	ll prev=0;bool Gf=0,Gf2=0;
	for(int i=0;i<n;i++)	{
		prev=0,Gf=0,Gf2=0;
		for(int j=i+1;j<n;j++)	{

			lx=sums[j]-sums[i];
			if(lx<=c)	continue;

			ll f=max(dp3[i],max(dp4[j],c+dp1[i]+dp2[j]));
			for(int x=i+1;x<j;x++)	{
				ll _x=sums[x]-sums[i];
				f=max(f,min(_x,lx-_x+c)+dp1[i]+d[x]);
				f=max(f,min(lx-_x,_x+c)+dp2[j]+d[x]);
				for(int y=x+1;y<j;y++)	{
					ll f2=sums[y]-sums[x];
					f=max(f,min(f2,lx+c-f2)+d[x]+d[y]);
				}

			}
			if(Gf==0)	{
				Gf=1;
				prev=f;
			}
			else {
				if(Gf2==0)	{
					if(f>prev)	{
						Gf2=1;
					}

				}
				else	{
					assert(f>=prev);
				}	
			}
			// cout<<i<<" , "<<j<<"  :  "<<f<<endl;
			ans=min(ans,f);
		}
	}

    return ans;
}

Compilation message (stderr)


#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...