zoukankan      html  css  js  c++  java
  • 模拟祭-比萨-题解O(n)

    题目描述

    233233

    [ 233 ]

    ( 233 )

    KikokKikok 得到了一块比萨,他迫不及待地想与妹妹 Kik子和 koko美一同享用它。

    比萨是一种圆形的食物。为了将它分给三个人,Kikok 需要沿着半径方向切三刀。可是,由于这个比萨太硬了,Kikok只能沿着划好的刀痕把它切开。比萨上一开始有 nn 条刀痕,沿顺时针将它们按照从 1 到 n 的顺序标号

    当 11in 时,第 i 条刀痕与第 i+1 条刀痕之间的部分大小为 a_i;第 n 条与第 1 条刀痕之间的部分大小为 a_na

    因为怕妹妹们哭闹,在比萨分成三块后,Kikok准备让妹妹们拿较大的两块,自己拿最小的一块

    可是,Kiko 实在太喜欢比萨了,他想吃地尽可能多,也就是让切出的比萨中最小的一块尽可能地更大。那么,Kikok 最多能吃到多少比萨呢?

    输入格式

    输入文件第一行包含一个整数 n,表示比萨上刀痕的数量。

    接下来 n 行,其中第 i 行包含一个整数 a_i,依次表示相邻两条刀痕之间的部分的大小。

    输出格式

    输出一行一个整数,表示最小的一块比萨的最大大小。

    样例

    Input 1:

    6 
    1 5 4 5 2 4

    Output 1:

    6
    提示与说明

    在 11 号、33 号和 55 号刀痕处切开时取得最优解。

    对于 10%的数据,n≤100。

    对于 30%的数据,n≤400。

    对于 60%的数据,n≤8000。

    对于 100%的数据,3≤n≤100000, 1≤ai≤1000000000。

    -----------------------------------------------------------------------------

    把圆拆成条

    其中的一个特殊块

    是两头块的加和

    用3个指针

    边遍历,边找最小块的最大值

    于是就出来了

    #include<cstdio>
    #include<iostream>
    #define maxn 100010
    using namespace std;
    long long n,a[maxn],minn,sum[maxn];
    int main()
    {
        scanf("%lld",&n);
        for(int i=1; i<=n; i++)
        {
            scanf("%lld",&a[i]);
            sum[i]=sum[i-1]+a[i];
        }
        int t1=1,t2=2,t3=3;
        for(int i=1; i<=3*n; i++)
        {
            if(t2>t3) swap(t2,t3);
            if(t1>t2) swap(t1,t2);
            long long ans1=sum[t2]-sum[t1];
            long long ans2=sum[t3]-sum[t2];
            long long ans3=sum[n]-sum[t3]+sum[t1];
            long long pp=min(ans1,min(ans2,ans3));
            if(pp>minn) minn=pp;
            if(pp==ans2)
            {
                t3++;
                if(t3>n) t3=1;
            }
            else if(pp==ans1)
            {
                t2++;
                if(t2>n) t2=1;
            }
            else if(pp==ans3)
            {
                t1++;
                if(t1>n) t1=1;
            }
        }
        printf("%lld",minn);
        return 0;
    }
  • 相关阅读:
    初步使用redis
    redis配置文件介绍
    windows64位 redis安装 步骤
    敏感词过滤算法
    SpringBoot使用拦截器无效
    linux常用命令
    automation(一)
    JAVA的接口多态
    JAVA的多态(强制转换)
    JAVA的多态
  • 原文地址:https://www.cnblogs.com/darlingroot/p/10438186.html
Copyright © 2011-2022 走看看