社区讨论

爆零求助啊。。。。。。。

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 条回复,欢迎继续交流。

正在加载回复...