题目: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])
//if(sum[l]<=sum[m]-sum[l+1])
ans++;
printf("%d %d\n",ans,m-ans);
//printf("%d\n",l);
return 0;
}