50分有亿点丑的代码,求助大佬
查看原帖
50分有亿点丑的代码,求助大佬
388414
comcopy楼主2021/8/13 19:59
#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,k;
int ans1=-1;
int a[100010];

bool checkmn(int x)
{
    int sum=0,ans=0;
    for(register int i=1;i<=n;++i)
    {
        sum+=a[i];
        if(sum>=x)
            {
                ++ans;
                sum=0;
            }
        if(sum<0) sum=0;
    }
    if(ans==k) ans1=ans1==-1?x:min(ans1,x);
    return ans>k;
}

bool checkmx(int x)
{
    int sum=0,ans=0;
    for(register int i=1;i<=n;++i)
    {
        sum+=a[i];
        if(sum>=x)
            {
                ++ans;
                sum=0;
            }
    }
    if(ans==k) ans1=max(ans1,x);
    return ans>=k;
}

signed main()
{
    cin>>n>>k;
    for(register int i=1;i<=n;++i)
        {
           cin>>a[i];
        }
    int l=1,r=1000000001;
    while(l<r)
    {
        int mid=l+((r-l)>>1);
        // cout<<l<<' '<<r<<' '<<mid<<endl;
        if(checkmn(mid)) 
        {
            l=mid+1;
        }
        else
        r=mid;
    }
    cout<<ans1<<' ';
    if(ans1==-1) return 0;
    ans1=-1;
    l=1,r=1000000001;
    while(l<r)
    {
        int mid=l+((r-l)>>1);
        if(checkmx(mid))
        {
            l=mid+1;
        }
        else
        r=mid;
    }
    cout<<ans1<<endl;
    return 0;
}

50pts,不知道wa哪儿了

2021/8/13 19:59
加载中...