题目:http://codeforces.com/contest/6/problem/C 俩人在两边吃糖,速度一样,如果在同样时间到达,那么就让给左边的人吃。 问俩人吃到多少糖; 问了云铭大神,二分的结束条件不一样,那么他while的条件就不一样的,要保证它能够出去,在一个数被当做mid处理过之后,对他加1,减1,或者不变,都是一样的。 但是要保证它能够突破这个循环。
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
const int maxn=
200005;
using namespace std;
int main()
{
int m;
int a;
int sum[maxn];
scanf(
"%d",&m);
sum[
0]=
0;
for(
int i=
1;i<=m;i++)
{
scanf(
"%d",&a);
sum[i]=sum[i-
1]+a;
}
int key=sum[m]/
2;
int l=
1;
int r=m;
int ans=
0;
while(l<=r)
{
int mid=(l+r)/
2;
if(sum[mid]<=key)
{
l=mid+
1;
ans=mid;
}
else
r=mid-
1;
}
if(sum[ans]<=sum[m]-sum[ans+
1])
ans++;
printf(
"%d %d\n",ans,m-ans);
return 0;
}
转载请注明原文地址: https://ju.6miu.com/read-300096.html