记录编号 346532 评测结果 AAAAAAAAAA
题目名称 [Keller战记·前传] keller的业火轮 最终得分 100
用户昵称 Gravatar521 是否通过 通过
代码语言 C++ 运行时间 0.696 s
提交时间 2016-11-12 10:12:03 内存使用 0.33 MiB
显示代码纯文本
#include<cstdio>
#define is(a) ((a)>='0'&&(a)<='9')
using namespace std;
typedef long long LL;
char ch;bool read_flag;
inline void read(int& x)
{
	x=0,read_flag=false;
	while(ch=getchar(),!is(ch))if(ch=='-')read_flag=1;
	do x=x*10+(ch^'0'),ch=getchar(); while(is(ch));
	if(read_flag) x=-x;
}
const int Size=50010;
int n,m;
struct HP{
	int hp[Size];
}a,temp;
inline void cut(LL x,int i,int num)
{
	for(int j=i-1;j>0;j--){
		LL t=x-(i-j)*(i-j);
		t*=num;
		if(t<=0) return ;
		temp.hp[j]-=t;
	}
}
inline bool judge(int x)
{
	temp=a;
	int k=0,i;
	for(i=n;i>0;i--){
		if(temp.hp[i]>=0){
			int cnt=0;
			while(temp.hp[i]>=0) k++,cnt++,temp.hp[i]-=x;
			cut(x,i,cnt);
		}
		if(k>m) return false;
	}
	return true;
}
int _521()
{
#define enjoy_coding
#ifdef enjoy_coding
	freopen("Keller_T1.in","r",stdin);
	freopen("Keller_T1.out","w",stdout);
#else
	freopen("1.in","r",stdin);
#endif
	int i,j;
	LL l=0,r=0,mid,ans=0;
	read(n),read(m);
	for(i=1;i<=n;i++) read(a.hp[i]),r+=a.hp[i]+1;
	while(l<=r){
		mid=l+r>>1;
		if(judge(mid)) ans=mid,r=mid-1;
		else l=mid+1;
	}
	printf("%I64d\n",ans);
	return 0;
}
int _520=_521();
int main(){;}