BZOJ 2600/IOI2011 ricehub

来源:互联网 发布:c语言中const的用法 编辑:程序博客网 时间:2024/06/18 09:22

思路:
二分一下即可。。

#include<iostream>#include<cstdio>#include<cstdlib>#include<algorithm>#include<cmath>#include<cstring>#include<string>using namespace std;typedef long long LL;const int imax=100000+229;int n; LL L,B;LL a[imax],sum[imax]; void iread(){    scanf("%d%lld%lld",&n,&L,&B);    for(int i=1;i<=n;i++) scanf("%lld",&a[i]);}bool pd(int x){     LL now=0;     for(int i=1;i<=(x/2);i++) now+=(a[x-i+1]-a[i]);     LL Min=now; int t=x/2;     for(int i=2;i+x-1<=n;i++)     {         int last=i-1; int end=i+x-1;         LL jian=a[last+t]-a[last];         LL jia=a[end]-a[end-t];         now=now-jian+jia;         if(now<Min) Min=now;     }      return Min<=B;}void iwork(){    int l=1; int r=n;    while(l<=r)    {        if(l+1==r || l==r)        {            if(pd(r)) l=r;            break;          }           int Mid=(l+r)>>1;        if(pd(Mid)) l=Mid;        else r=Mid-1;    }       printf("%d\n",l);}int main(){    iread();    iwork();    return 0;}
0 0