社区讨论
不懂题解
P1485火枪打怪参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mi6oimh4
- 此快照首次捕获于
- 2025/11/20 08:14 4 个月前
- 此快照最后确认于
- 2025/11/20 08:14 4 个月前
到大佬说说怎么改、
CPP#include<cstdio>
#include<string>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int N=500005;
int n, k, i, j;
long long hp[N], Dmg[N], ans;
bool check(long long p)
{
long long used=0, i, j;
memset(Dmg, 0, sizeof(Dmg));
//cout<<p<<endl;
for(i=1ll*n; i>=1ll; i--)
{
//int x=used;
if(Dmg[i]>hp[i]) continue;
used+=(hp[i]-Dmg[i])/p+1;
//if(used!=x) cout<<Dmg[i]<<endl;
for(j=i-1; j>=1&&(p-(i-j)*(i-j))>0; j--)
Dmg[j]+=((hp[i]-Dmg[i])/p+1) * max(0*1ll, p-1ll*(i-j)*(i-j));
}
//cout<<used<<" ";
return used<=(1ll*k);
}
int main()
{
freopen("MianBao.in","r",stdin);
cin>>n>>k;
for(int i=1; i<=n; i++)
scanf("%lld", &hp[i]);
//cout<<mx<<endl;
long long l=1, r=1000000000000000, mid;
while(l<r)
{
mid=(l+r)>>1;
if(check(mid)) r=mid;
else l=mid+1;
}
cout<<l<<endl;
return 0;
}
//-1 0 -1 -2 -3 -2 -1 -2 -3
回复
共 0 条回复,欢迎继续交流。
正在加载回复...