【BZOJ4590】自动刷题机

【思路分析】

比赛的时候想到了用二分+贪心,二分的部分与贪心的部分也写对了,但是由于数据范围未看没有开long long,且二分左端点赋值过小导致WA掉

正解:二分+贪心

二分代码的长度,贪心判断能否达到,算法上没什么好说的,主要是细节处理上

关于细节处理:

  1. 开long long
  2. 右端点数据可以开的尽量大一点
  3. 输出-1的点要特别小心

代码:

#include<cstdio>
#include<cmath>
#include<cctype>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<vector>
#include<map>
#include<set>
using namespace std;
inline long long read()
{
    char chr=getchar();
    long long f=1,ans=0;
    while(!isdigit(chr)) {if(chr=='-') f=-1;chr=getchar();}
    while(isdigit(chr))  {ans=(ans<<1)+(ans<<3)+chr-'0';chr=getchar();}
    return ans*f;
}
long long n,m,a[100005],l=1,r,mid,ans1=-1,ans2=-1;
inline long long check(long long x){//贪心判断解是否可行 
    long long s=0,num=0;
    for(int i=1;i<=n;i++){
        s+=a[i];
        if(s<0) s=0;
        if(s>=x) s=0,num++;
    }
    return num;
}
int main(){
    n=read(),m=read();
    for(int i=1;i<=n;i++)
        a[i]=read();
    r=1e18;//开得尽量大一点
    while(l<=r){
        mid=l+r>>1;
        if(check(mid)<=m)   ans1=mid,r=mid-1;
                else    l=mid+1;
    }//取最小值
    l=1,r=1e18;
    while(l<=r){
        mid=l+r>>1;
        if(check(mid)<m)    ans2=mid,r=mid-1;
                else    l=mid+1;
    }//取最大值
    ans2--;
    if(ans1>ans2||ans1==-1||ans2==-1) {//如果ans1没有更新过 或者 ans2没有更新过 或者 
    //小的答案大于大的答案
        printf("-1");
        return 0;
    }
    printf("%lld %lld",ans1,ans2);
    return 0;
}
全部评论

相关推荐

2025-12-06 01:10
已编辑
哈尔滨工程大学 Java
一面问的真细,二面不知为啥变双机位。9.29快手主站平时怎么学习&nbsp;AI&nbsp;的,国内外知名大模型,实习公司都用的什么大模型,怎么评估效果的java池化思想,线程池构造方法的核心参数,线程池中阻塞队列注意事项,submit方法参数和执行逻辑,shutdown和shutdownnow,核心线程允许过期吗threadlocal底层,为什么key是弱引用,key回收了再get或者set这个value会怎样aqs,如何保证公平性java代理java堆划分,新生代还有别的晋升老年代的情况吗,什么时候触发gc,gc失败抛什么异常,如何排查oom,导出dump命令redis数据结构,哪个底层是跳表,和其他数据结构对比布隆过滤器会出现大key问题吗,你咋实现的布隆过滤器你怎么实现redis分布式锁,可重入,续期聚簇索引非聚簇索引select语句会加锁吗,怎么实现的不加锁undolog&nbsp;redolog&nbsp;binlog怎么能让select加锁,update这个范围加的什么锁,update一条呢手撕简单01背包,接雨水10.10快手主站意图识别用的哪个大模型,走到意图和rag的比例,faq是点击的吗自然语言怎么识别的gap一年干啥了,转正怎么样没跟组里提意向吗,研究生研究方向是传统算法吗,会大模型微调吗注册场景为什么用布隆过滤器,原理分布式锁底层的key怎么拼的,value里是什么redis持久化zset底层mysql索引结构,一个表三个字段有主键唯一索引和没索引的字段会有几个b+树,聚簇索引非聚簇索引存的啥无手撕
点赞 评论 收藏
分享
安静的鲸鱼offer...:神仙级别hr,可遇不可求,甚至他可能也是突然有感而发。只能说遇上是件幸事。
秋招开始捡漏了吗
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务