首页 > 其他分享 >2023.04.11 定时测试随笔 T1

2023.04.11 定时测试随笔 T1

时间:2023-04-11 15:01:02浏览次数:48  
标签:11 cnt int sum 2023.04 mid T1 while check

T1 数列分段 Section II

传送门:洛谷P1182

题意:

把 \(n\) 个数分成 \(m\) 段,使 \(m\) 段和的最大值最小,求这个值;


题解:

因为题目要求最大值的最小值,很明显的一道二分答案的板子题,我们二分这个最大值,
因为是区间和,我们用前缀和来维护,二分区间就是 [ \(sum[1]\) , \(sum[n]\) ] :

    for (int i = 1; i <= n; ++ i) {
        scanf("%d", &a[i]);
        sum[i] = a[i] + sum[i - 1];
    }
    Max = sum[n], Min = sum[1];
    ll l = Min, r = Max;
    while (l < r) {
        ll mid = l + r >> 1;
        if (check(mid))
            r = mid;
        else
            l = mid + 1;
    }

对于CHECK函数:

因为 \(m <= n\) ,数据保证能分成 \(m\) 段,我们枚举 \(1\) ~ \(n\) , 判断是否有小于等于 \(m\) 个区间的最大值小于等于 \(mid\) , 如果是,那就向 \(l\) ~ \(mid\) 里二分,如果非,那就二分 \(mid + 1\) ~ \(r\);

int check(ll x) {
    int cnt = m, l = 0, r = 1;
    while (cnt --) {
        while (sum[r] - sum[l] <= x && r <= n) ++ r;
        l = -- r;
        if (l == n) return 1;
    }
    return 0;
}

贴代码:

#include <bits/stdc++.h>

typedef long long ll;
using namespace std;

const int maxn = 1e5 + 5;
ll sum[maxn], Max, Min;
int n, m, a[maxn];

int check(ll x) {
    int cnt = m, l = 0, r = 1;
    while (cnt --) {
        while (sum[r] - sum[l] <= x && r <= n) ++ r;
        l = -- r;
        if (l == n) return 1;
    }
    return 0;
}

void read() {
    scanf("%d%d", &n, &m);
    Min = 0x3f3f3f3f;
    for (int i = 1; i <= n; ++ i) {
        scanf("%d", &a[i]);
        sum[i] = a[i] + sum[i - 1];
    }
    Max = sum[n], Min = sum[1];
    ll l = Min, r = Max;
    while (l < r) {
        ll mid = l + r >> 1;
        if (check(mid))
            r = mid;
        else
            l = mid + 1;
    }
    printf("%lld\n", l);
}

int main() {
    read();
    return 0;
}

标签:11,cnt,int,sum,2023.04,mid,T1,while,check
From: https://www.cnblogs.com/florence25/p/17306233.html

相关文章

  • 2004-text1
    2004-text1interactive交互的,互相作用的,互相影响的interactv.interactionn.resume摘要,个人简历promising有希望的,有前途的promise许诺,给人希望time-consuming耗时的consume消耗,耗费,耗尽inefficient效率低的,能力差的efficient有能力......
  • (KMP 1.1)hdu 1711 Number Sequence(KMP的简单应用——求pattern在text中第一次出现的
    题目:NumberSequenceTimeLimit:10000/5000MS(Java/Others)    MemoryLimit:32768/32768K(Java/Others)TotalSubmission(s):12902    AcceptedSubmission(s):5845ProblemDescriptionGiventwosequencesofnumbers:a[1],a[2],......,a[N],andb[1......
  • 力扣1107(MySQL)-每日新用户统计(中等)
    题目:Traffic表:该表没有主键,它可能有重复的行。activity列是ENUM类型,可能取(‘login’,‘logout’,‘jobs’,‘groups’,‘homepage’)几个值之一。问题编写一个SQL查询,以查询从今天起最多90天内,每个日期该日期首次登录的用户数。假设今天是2019-06-30.示例Tr......
  • macOS Big Sur 11.7.6 (20G1231) Boot ISO 原版可引导镜像
    本站下载的macOS软件包,既可以拖拽到Applications(应用程序)下直接安装,也可以制作启动U盘安装,或者在虚拟机中启动安装。另外也支持在Windows和Linux中创建可引导介质。2023年4月10日(北京时间11日凌晨),Apple为那些无法更新macOSVentura的旧Mac发布了macOSBig......
  • macOS Big Sur 11.7.6 (20G1231) 正式版 ISO、PKG、DMG、IPSW 下载
    本站下载的macOS软件包,既可以拖拽到Applications(应用程序)下直接安装,也可以制作启动U盘安装,或者在虚拟机中启动安装。另外也支持在Windows和Linux中创建可引导介质。2023年4月10日(北京时间11日凌晨),Apple为那些无法更新macOSVentura的旧Mac发布了macOSBig......
  • x210-2023-04-11
    1、在卸载驱动模块时出现提示:rmmod:chdir(2.6.35.7):Nosuchfileordirectory,需要到/lib/modules下创建2.6.35.7这个文件夹,但是创建好后再尝试卸载仍不成功,于是按照网上资料检查/sbin底下是否有rmmod这个命令,检查过后确定有该命令所以应该不是这个问题,然后又看到有资料说要复......
  • delphi 11.3 java.ioexception:cleartext http traffic [IP地址] not permitted
    要在AndroidManifest.xml添加如下属性即可:参考:HowtoFixCleartextHTTPTrafficnotPermittedinAndroid-TRENDOCEANS ......
  • C++-C11-chrono-获取当前时间、获取阶段时间
    C++-C11-chrono-获取当前时间、获取阶段时间Linux下使用C++11的chrono库获取时间。#include<chrono>#include<thread>#include<iostream>int64_tgetCurrentLocalTimeStamp(){std::chrono::time_point<std::chrono::system_clock,std::chrono::millisec......
  • PE安装系统Windows11
    本文主要讲在WePE下安装操作系统Windows11。 一、准备工作1、U盘,需大于8G2、微PE软件3、Windows11安装包 二、安装系统1、使用微PE制作软件,一键制作U盘启动盘,可以查看我以前的文章《使用微PE制作启动U盘》,并拷贝Windows11安装包到已经制作好的PEU盘中。 2、设置电脑......
  • Debian11安装python3.10
    一、aptinstallpython默认安装的是python3.9 二、安装python3.10需要下载源码手动编译安装sudoaptupdate&&sudoaptupgradesudoaptinstallbuild-essentialzlib1g-devlibncurses5-devlibgdbm-devlibnss3-devlibssl-devlibreadline-devlibffi-devlibsqlit......