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

    xiaoxiao2021-03-25  14

    题目: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; }
    转载请注明原文地址: https://ju.6miu.com/read-300096.html

    最新回复(0)