zoukankan      html  css  js  c++  java
  • BZOJ4590: [Shoi2015]自动刷题机

    【传送门:BZOJ4590


    简要题意:

      有l秒时间,AC了k道题,给出每秒写的代码行数(行数>0表示写,<0表示删除,如果剩下的行数不够删,则为0),假设行数>=n时能够提交AC一道题,求出n的最小值和最大值


    题解:

      两个二分找最大值最小值,判断的时候只要>=mid就提交

      然后对于不存在的情况,只要没有记录过答案就表示不存在


    参考代码:

    #include<cstdio>
    #include<cstring>
    #include<cstdlib>
    #include<algorithm>
    #include<cmath>
    using namespace std;
    typedef long long LL;
    LL a[110000];int n;
    int check(LL x)
    {
        LL d=0;
        int s=0;
        for(int i=1;i<=n;i++)
        {
            d+=a[i];
            if(d>=x) s++,d=0;
            if(d<0) d=0;
        }
        return s;
    }
    int main()
    {
        int k;
        scanf("%d%d",&n,&k);
        for(int i=1;i<=n;i++) scanf("%lld",&a[i]);
        LL l=1,r=1LL<<63-1;
        LL nn=-1,mid,mm=-1;
        while(l<=r)
        {
            mid=(l+r)/2;
            int t=check(mid);
            if(t<=k)
            {
                if(t==k) nn=mid;
                r=mid-1;
            }
            else l=mid+1;
        }
        l=1,r=1LL<<63-1;
        while(l<=r)
        {
            mid=(l+r)/2;
            int t=check(mid);
            if(t>=k)
            {
                if(t==k) mm=mid;
                l=mid+1;
            }
            else r=mid-1;
        }
        if(nn==-1||mm==-1) printf("-1
    ");
        else printf("%lld %lld
    ",nn,mm);
        return 0;
    }

     

  • 相关阅读:
    汉语编程
    第一次作业
    个人总结
    psp表格
    第三次个人作业——用例图设计
    第二次结对作业
    第一次结对作业
    第二次个人编程作业
    第一次编程作业
    第一次博客作业
  • 原文地址:https://www.cnblogs.com/Never-mind/p/8624280.html
Copyright © 2011-2022 走看看