제출 #344946

#제출 시각아이디문제언어결과실행 시간메모리
344946ogibogi2004선물상자 (IOI15_boxes)C++14
100 / 100
682 ms282688 KiB
#include "boxes.h"
#include <bits/stdc++.h>
using namespace std;
#define ll long long
ll ans=2e17;
const ll MAXN=1e7+6;
ll pref[MAXN];
ll suf[MAXN];
long long delivery(int N, int K, int L, int p[]) {
	
	vector<ll>xd;
	for(ll i=0;i<N;i++)xd.push_back(p[i]);
	ll l=0,r=N-1,k=K,n=N,of=L,s,sl=0,sr=0;
	for(ll i=0;i<N;i++)
	{
		if(i-k>=0)pref[i]=pref[i-k];
		pref[i]+=xd[i]*2;
	}
	for(ll i=N-1;i>=0;i--)
	{
		if(i+k<=N-1)suf[i]=suf[i+k];
		suf[i]+=(of-xd[i])*2;
	}
	for(ll i=n-1;i>min(k-1,n-1);i--)
	{
		if((n-i)%k==0||i-1<=min(k-1,n-1))
		{
			sr+=(of-xd[i])*2;
		}
	}
	sr=suf[min(k-1,n-1)+1];
	for(ll i=0;i<n+1;i++)
	{
		ll i2=min(i+k-1,n-1);s=0;
		if(i2>=i)
		{
			s+=of;
		}
		ans=min(ans,sl+sr+s);
		//cout<<i<<":"<<sl<<" "<<sr<<" "<<s<<endl;
		/*if(i%k==0)
		{
			sl+=xd[i]*2;
		}
		else
		{
			sl-=xd[i-1]*2;
			sl+=xd[i]*2;
		}
		if(i+k<n)
		{
			sr-=(of-xd[i+k])*2;
			if((n-(i+k))%k!=0&&i+k+1<n)
			{
				sr+=(of-xd[i+k+1])*2;
			}
		}*/
		sl=pref[i];
		sr=suf[min(n,i+k+1)];
	}
	sl=0;sr=0;
	for(ll i=n-1;i>=0;i--)
	{
		if((n-i)%k==0||i==0)
		{
			sr+=(of-xd[i])*2;
		}
	}
	sr=suf[0];
	//cout<<sl<<" "<<sr<<endl;
	ans=min(ans,sr);
	for(ll i=0;i<n;i++)
	{
		/*if(i%k==k-1||i==0)sl+=xd[i]*2;
		else sl+=(xd[i]-xd[i-1])*2;
		sr-=(of-xd[i])*2;
		if(i+1<n)
		{
			if((n-(i+1))%k!=0)
			{
				sr+=(of-xd[i+1])*2;
			}
		}*/
		sl=pref[i];
		sr=suf[i+1];
		//cout<<i<<" "<<sl<<" "<<sr<<endl;
		ans=min(ans,sl+sr);
	}
    return ans;
}

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

boxes.cpp: In function 'long long int delivery(int, int, int, int*)':
boxes.cpp:13:5: warning: unused variable 'l' [-Wunused-variable]
   13 |  ll l=0,r=N-1,k=K,n=N,of=L,s,sl=0,sr=0;
      |     ^
boxes.cpp:13:9: warning: unused variable 'r' [-Wunused-variable]
   13 |  ll l=0,r=N-1,k=K,n=N,of=L,s,sl=0,sr=0;
      |         ^
#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...