社区讨论
爆零求助啊。。。。。。。
P3957[NOIP 2017 普及组] 跳房子参与者 3已保存回复 12
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 12 条
- 当前快照
- 1 份
- 快照标识符
- @mi6y7kgy
- 此快照首次捕获于
- 2025/11/20 12:45 4 个月前
- 此快照最后确认于
- 2025/11/20 15:28 4 个月前
CPP
#include<bits/stdc++.h>
using namespace std;
int n,d,k,x[500005],s[500005],sum,f,r,g[500005],b,mid,a,ans;
struct node
{
int id,z;
}q[500005];
inline bool check(int j)
{
memset(g,0,sizeof g);
f=r=-1;
for(int i=1;i<=n;i++)
{
while(f<r&&q[r].z>=s[i-1])r--;
r++;q[r].z=s[i-1];q[r].id=i;
while(f<r&&x[q[f+1].id]<x[i]-d-j)f++;
g[i]=q[f+1].z+g[i-1];
if(g[i]>=k)return true;
}
return false;
}
int main()
{
cin>>n>>d>>k;
for(int i=1;i<=n;i++)
{
scanf("%d%d",&x[i],&s[i]);
if(s[i]>0)sum+=s[i];
}
if(sum<k){
cout<<-1;
return 0;
}
a=1;b=x[n];
while(a<b)
{
mid=(a+b)/2;
if(check(mid)==true)b=mid-1,ans=mid;
else a=mid+1;
}
cout<<ans;
return 0;
}
回复
共 12 条回复,欢迎继续交流。
正在加载回复...