zoukankan      html  css  js  c++  java
  • BZOJ 4590 自动刷题机

    简单二分题。

    二分的时候要注意边界一定要精确。像这题若设初值l=0就WA了。。。。

    反正就是边界和check函数配合起来不能导致错误。

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #define maxn 100050
    #define inf 0x7f7f7f7f7f7f7f7f
    using namespace std;
    long long n,k,x[maxn],ans1=-1,ans2=-1;
    long long check(long long lim)
    {
        long long now=0,ret=0;
        for (long long i=1;i<=n;i++)
        {
            now=max(now+x[i],0LL);
            if (now>=lim) {ret++;now=0;}
        }
        return ret;
    }
    int main()
    {
        scanf("%lld%lld",&n,&k);
        for (long long i=1;i<=n;i++) scanf("%lld",&x[i]);
        long long l=1,r=inf;
        while (l<=r)
        {
            long long mid=(l+r)>>1,ret=check(mid);
            if (ret==k) ans2=mid;
            if (ret<k) r=mid-1;
            else l=mid+1;
        }
        l=1;r=inf;
        while (l<=r)
        {
            long long mid=(l+r)>>1,ret=check(mid);
            if (ret==k) ans1=mid;
            if (ret<=k) r=mid-1;
            else l=mid+1;
        }
        if ((ans1==-1) || (ans2==-1)) printf("-1
    ");
        else printf("%lld %lld
    ",ans1,ans2);
        return 0;
    }
  • 相关阅读:
    29.内置方法中之描述符
    28. 面向对象进阶之内置方法上
    Sort Colors*
    Implement Trie (Prefix Tree)
    Course Schedule
    Permutations
    Reverse Linked List
    Decode Ways
    Subsets *
    Longest Consecutive Sequence *
  • 原文地址:https://www.cnblogs.com/ziliuziliu/p/6417542.html
Copyright © 2011-2022 走看看