这个代码有什么问题?

P1182 数列分段 Section II

$l$ 设成负无穷大也不行
by StarsIntoSea_SY @ 2024-02-21 09:47:44


@[StarsIntoSea_SY](/user/1121518) 试试把r设成正无穷
by happysheep @ 2024-02-21 10:01:53


@[happysheep](/user/937486) 不行
by StarsIntoSea_SY @ 2024-02-21 10:38:23


solve函数里num初始化为0
by Tommyshizichen @ 2024-02-21 10:41:29


说错了,初始化为1
by Tommyshizichen @ 2024-02-21 10:42:08


这样 ```c #include<stdio.h> #define int long long int n,m,a[100002],l=0,r=10010101010; ```
by happysheep @ 2024-02-21 10:44:54


@[Tommyshizichen](/user/1124466) @[happysheep](/user/937486) 都不行……离谱了
by StarsIntoSea_SY @ 2024-02-21 10:51:15


加一个else就可以了 ~~真没想到是这个~~
by happysheep @ 2024-02-21 11:10:23


@[StarsIntoSea_SY](/user/1121518) ```c #include<stdio.h> #define int long long int n,m,a[100002],l=0,r=0; int max(int x,int y){return x>y?x:y;} inline bool solve(int x){ int tot=0,num=0; for(int i=1;i<=n;++i){ if(tot+a[i]<=x) tot+=a[i]; else{ tot=a[i]; num++; } } return num>=m; } signed main(){ scanf("%lld%lld",&n,&m); for(int i=1;i<=n;++i){ scanf("%lld",&a[i]); l=max(l,a[i]); r+=a[i]; } while(l<=r){ int mid=l+r>>1; if(solve(mid)) l=mid+1; else r=mid-1; } printf("%lld\n",l); } ```
by happysheep @ 2024-02-21 11:12:58


@[happysheep](/user/937486) 谢dalao,我本人感到及其无语……(逃
by StarsIntoSea_SY @ 2024-02-21 11:14:04


|