ycy1124 @ 2024-04-09 19:20:14
#include<bits/stdc++.h>
using namespace std;
long long a[100001];
int main()
{
long long n,m;
cin>>n>>m;
for(int i=1;i<=n;i++)
{
cin>>a[i];
a[i]+=a[i-1];
}
long long l=0,ans,r=a[n]+1,mid;
while(l<=r)
{
mid=(l+r)/2;
long long js1=0,js2=0;
long long i=0;
while(i<=n)
{
if(a[i]-js1>=mid)
{
js2++;
js1=a[i-1];
}
i++;
}
if(js2>=m)
{
l=mid+1;
ans=mid;
}
else
{
r=mid-1;
ans=mid-1;
}
}
cout<<ans;
return 0;
}
by Au_Gold @ 2024-04-13 22:53:52
@ycy1124 左边界不能是1,而是输入的数中的最大值
by ycy1124 @ 2024-04-15 12:42:43
@Au_Gold
具体怎么改求大佬指教
by Au_Gold @ 2024-04-16 13:43:07
@ycy1124 你的l=0错了,应该 l = 你输入的数据中的最大值
by Au_Gold @ 2024-04-16 13:44:11
@Au_Gold 我这句说错了,你的左边界不是1,是0
by ycy1124 @ 2024-04-16 13:47:08
@Au_Gold
我改了结果还是80
by 无痕 @ 2024-04-18 16:55:41
第i个数的值本身可能大于mid
if(a[i]-js1>=mid) //若a[i] - a[i-1]大于mid,此时的最大值显然不是mid而是a[i] - a[i-1]
{
js2++;
js1=a[i-1];
}
hack一组数据
input
5 4
1 2 3 4 5
output
5