您的位置:首页 > 其它

Round #6 C.Alice, Bob and Chocolate-二分

2017-04-07 19:59 357 查看
题目: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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: