年轮蛋糕JOI2014Final

JOI 君马上要和妹妹 JOI 子和 JOI 美一起吃小吃。今天的小吃是他们三个人都很喜欢的年轮蛋糕。

年轮蛋糕是像下图一样呈圆筒形的蛋糕。为了把蛋糕分给三个人,JOI 君必须沿着半径方向切 3 刀,从而把蛋糕分成三块。然而,由于年轮蛋糕硬得像实木一样,要让刀切进去并不简单。因此,这个年轮蛋糕上事先准备了 N 个切口,而 JOI 君只能在有切口的位置下刀。切口按顺时针顺序编号为 1到 N,对于 1≤i≤N−1,第 i 个切口和第 i+1个切口之间部分的大小是 Ai。第 N 个切口和第 1个切口之间部分的大小是 AN ​​。

图 1:一个年轮蛋糕的例子,N=6,A1=1,A2=5,A3=4,A4=5,A5=2,A6=4

妹控的 JOI 君在把蛋糕切成 3 块之后,自己选走最小的一块吃掉,把剩下两块分给两个妹妹。而另一方面,JOI 君太喜欢年轮蛋糕了,只要能吃到的时候就会想吃很多很多。试求:最小块的大小不超过多少。

样例说明 1


图 2:从第 1,3,5个切口下刀时是最优解(即图中粗实线位置)。

这道题先二分枚举最小块,再二分另一块使得这一块长度大于是最小块

第三块就用总长度减去前两块,判断第三块是否大于最小块,如果成立就记录取max

#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<queue>
#define ll long long
using namespace std;
const int maxn=1000000+101010;
inline int read(){
    int x=0,f=1;char ch=getchar();
    for(;!isdigit(ch);ch=getchar())if(ch=='-')f=-1;
    for(;isdigit(ch);ch=getchar())x=(x<<3)+(x<<1)+ch-'0';
    return x*f;
}
ll n,a[maxn],sum,num[maxn];


bool erfe(ll l,ll r,ll he){
    ll l1=l,r1=r,ans=0;
    while(r1>=l1){
        ll mid=r1+l1>>1;    
        ll qq=num[mid]-num[l-1],ww=num[n]-qq-he;
        if(qq>=he){
            if(ww>=he)return 1;
            else r1=mid-1;    
        }
        else l1=mid+1;
    }
    return 0;
}
ll aa;
ll erf(ll l,ll r){
    ll l1=l,r1=r,ans=0;
    while(r1>=l1){
        ll mid=r1+l1>>1;
        if(num[mid]-num[l-1]<=sum){
            if(erfe(mid+1,r,num[mid]-num[l-1]))ans=max(ans,num[mid]-num[l-1]),l1=mid+1;
            else r1=mid-1;
        }
        else r1=mid-1;
    }
    return ans;
}

ll ans=0;
void zj(){
    for(ll i=1;i<=n;i++){
        ans=max(ans,erf(i,n+i-1));
    }
    printf("%lld",ans);
    return ;
}

int main(){
    n=read();
    for(ll i=1;i<=n;i++){
        a[i]=read();
        num[i]=num[i-1]+a[i];
        sum+=a[i];
    }
    for(ll i=n+1;i<=2*n;i++)a[i]=a[i-n],num[i]=num[i-1]+a[i];
    sum=sum/3;
    zj();
    return 0;
}
/*
20
2 3 5 5 4 4 2 4 3113 24
23 43 465 456 2 576 32 45 345 23
15
1 3 4 2 4 252 4 232
2 3 55 32 5 34 23 

*/

猜你喜欢

转载自www.cnblogs.com/wzq--boke/p/9754568.html