• 09: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
    全局题号
    7414
    提交次数
    14
    尝试人数
    7
    通过人数
    2

    你的提交记录

    # 结果 时间
    4 Accepted 07-16
    3 Wrong Answer 07-16
    2 Time Limit Exceeded 07-16
    1 Time Limit Exceeded 07-16
     
     
     
    二分答案秒过
    以后写二分答案不写l++了,慢的要死。。
     
     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<cmath>
     5 #define lli long long int 
     6 using namespace std;
     7 const lli MAXN=100000001;
     8 void read(lli &n)
     9 {
    10     char c='+';lli x=0;bool flag=0;
    11     while(c<'0'||c>'9'){c=getchar();if(c=='-')flag=1;}
    12     while(c>='0'&&c<='9')
    13     x=(x<<1)+(x<<3)+c-48,c=getchar();
    14     flag==1?n=-x:n=x;
    15 }
    16 lli a[MAXN];
    17 lli l,r;
    18 lli n;
    19 bool pd(lli num)
    20 {
    21     lli now=0;
    22     lli tot=0;
    23     for(lli i=1;i<=n;i++)
    24     {
    25         if(now+a[i]<num)
    26             now+=a[i];
    27         else if(now+a[i]==num)
    28             tot++,now=0;
    29         else if(now+a[i]>num)
    30             tot++,now=a[i];
    31     }
    32     if(now)
    33         tot++;
    34     if(tot>3)
    35         return 0;
    36     else 
    37         return 1;
    38 }
    39 int  main()
    40 {
    41     read(n);
    42     for(lli i=1;i<=n;i++)
    43         read(a[i]),r+=a[i],l=max(l,a[i]);
    44     while(l<=r)
    45     {
    46         lli mid=(l+r)>>1;
    47         if(pd(mid))
    48             r=mid-1;
    49         else 
    50             l=mid+1;
    51     }
    52     printf("%lld",l);
    53     return 0;
    54 }
     
  • 相关阅读:
    JavaScript中Null和Undefined的区别
    javascript中的计算题
    数组去重
    javascript面向对象中继承实现的几种方式
    数列求值 题解
    首字母变大写 题解
    发工资咯:) 题解
    绝对值排序 题解
    数列有序 题解
    母牛的故事 题解
  • 原文地址:https://www.cnblogs.com/zwfymqz/p/7191405.html
Copyright © 2020-2023  润新知