zoukankan      html  css  js  c++  java
  • LGTB 学分块

    总时间限制: 
    10000ms
     
    单个测试点时间限制: 
    1000ms
     
    内存限制: 
    65536kB
    描述

    LGTB 最近在学分块,但是他太菜了,分的块数量太多他就混乱了,所以只能分成 3 块

    今天他得到了一个数组,他突然也想把它分块,他想知道,把这个数组分成 3 块,块可以为空。假设 3 块各自的和中的最大值最小

    请输出分完之后 3 块中的最大值

    输入
    输入第一行包含一个整数 n 代表数组大小
    接下来 n 个整数 a1 , a2 , ..., a n ,代表数组
    输出
    输出包含 1 个整数,代表分块完成后 3 块中的最大值
    样例输入
    10
    2 5 1 4 7 3 6 2 5 1
    
    样例输出
    14
    提示
    对于 40% 的数据,1 ≤ n ≤ 10
    对于 70% 的数据,1 ≤ n ≤ 1e3
    对于 100% 的数据,1 ≤ n ≤ 1e5 , 1 ≤ ai ≤ 1e7
    二分答案 一眼题目,long long挂掉30
    #include<cstdio>
    #include<iostream>
    using namespace std;
    #define LL long long
    int n;
    int a[100004];
    
    int  check(int x)
    {
        int num=1,sum=0;
        for(int i=1;i<n;i++)
        {
            sum+=a[i];
            if(sum+a[i+1]>x)num++,sum=0;
        }
        if(num>3)return 1;
        return 0;
    }
    int main()
    {
        cin>>n;
        LL r=0,l=0x7fffffff;
        for(int i=1;i<=n;i++)cin>>a[i],r+=a[i],l=min(l,a[i]);
        int ans=0;
        int tmp=0;
        while(l<=r)
        {
            int mid=(l+r)>>1;
            if(check(mid))ans=mid,l=mid+1;
            else r=mid-1;
        }
        printf("%lld
    ",ans);
        return 0;
    }
  • 相关阅读:
    实习第三十天
    实习第二十九天
    武汉第二十七天
    实习第二十六天
    实习第二十五天
    实习第二十四天
    python基础之核心风格
    1 Python入门
    对计算机的基础概念讨论
    一对多,父对象包含其他对象字段时创建的连接就是一对多连接
  • 原文地址:https://www.cnblogs.com/sssy/p/7201431.html
Copyright © 2011-2022 走看看