首页 > 其他分享 >P1182 数列分段 Section II

P1182 数列分段 Section II

时间:2024-02-09 23:11:08浏览次数:40  
标签:二分 int Section mid check II sum P1182 left

原题链接

作为二分答案的入门题非常合适。

很典型的二分答案。但是这题有一个坑点,left的值不能设为0这种确定的值,而是应该设为这个数组的最大值。

这道题警示了我二分答案的一个重要前提:确定合理的二分区间。

题解

首先,判断单调性,对于一个最大值mid,如果能够满足check(),那么mid+1,mid+2,也可以满足。

bool check(int mid){
    int cnt=1,sum_mid=1,sum=0;
    for (int i=1;i<=n;i++){
        if (sum+a[i]<=mid) sum+=a[i];
        else sum=a[i],sum_mid++;
    }
    return sum_mid<=m ? true :false;
}

接下来,确定二分区间,极端情况下,分段区间m=n的话最大值的最小值就是这个数组的最大元素。

但是这种情况下,如果mid取了0,check()的返回值也是true(可以自己动手试一下)。

所以二分区间不能够草率的从0开始。

Code

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
int a[N],m,n;
bool check(int mid){
    int cnt=1,sum_mid=1,sum=0;
    for (int i=1;i<=n;i++){
        if (sum+a[i]<=mid) sum+=a[i];
        else sum=a[i],sum_mid++;
    }
    return sum_mid<=m ? true :false;
}
int main(){
    ios::sync_with_stdio(false);
    cin>>n>>m;
    int left=0,right=0;
    for (int i=1;i<=n;i++){
        cin>>a[i];
        left=max(a[i],left);
        right+=a[i];
    }
    while (left+1<right){
        int mid=left+(right-left>>1);
        if (check(mid)) right=mid;
        else left=mid;
    }
    cout<<right;
    return 0;
}

 

标签:二分,int,Section,mid,check,II,sum,P1182,left
From: https://www.cnblogs.com/purple123/p/18012685

相关文章

  • 代码随想录 day44 零钱兑换 II 组合总和 Ⅳ
    零钱兑换II这里组合类问题用上了dp[j]=dp[j-nums[i]]这个递推式由于说了硬币可以用无数次也就是这是个完全背包问题这里先遍历物品再遍历背包就是算了组合数反过来就是算排列数组合总和Ⅳ这题就是组合类问题的排列数模板题......
  • [LeetCode] 2641. Cousins in Binary Tree II
    Giventherootofabinarytree,replacethevalueofeachnodeinthetreewiththesumofallitscousins'values.Twonodesofabinarytreearecousinsiftheyhavethesamedepthwithdifferentparents.Returntherootofthemodifiedtree.Note......
  • 代码随想录 day43 最后一块石头的重量 II 目标和 一和零
    最后一块石头的重量II递推式和结果处理结果的意思是sum-target和target这两堆石头相撞目标和第一次见被薄纱这是组合类的dp递推一和零注意循环嵌套位置!这里是str外循环表示遍历物品里面的两层ij循环表示遍历背包容量这里是一个二维容量的背包......
  • IIS创建和管理虚拟网站
    实验介绍:本文会详细介绍创建虚拟站点的三种方法一:IP地址建立站点1.打开安装了IIS的windows,进入ip配置页面。添加几个ip,我这里添加的是192.168.1.209,192.168.1.210,192.168.1.2112.打开IIS管理页面,展开树形菜单,右键网站,点击添加网站3.在网站名称中输入你想设置的名称,物理......
  • PowerShell中,可以使用以下命令来发送和接收TCP数据 发送IPv4 TCP数据 接收IPv4 TCP
    在PowerShell中,可以使用以下命令来发送和接收TCP数据:发送IPv4TCP数据:CopyCode$remoteIPAddress="192.168.0.1"$remotePort=80$tcpClient=New-ObjectSystem.Net.Sockets.TcpClient($remoteIPAddress,$remotePort)$networkStream=$tcpClient.GetStream()$bytes......
  • IIS的详细配置
    一:配置默认文档输入ip打开哪个页面是由默认文档设定的1.打开IIS配置页面,点击网站。我们的默认站点已经启动,可以看到绑定的ip和网页的路径2.选中DefaultWebSite,可以看到有个默认文档3.打开默认文档发现已经有五个条目,右键添加我们想要的默认文档名如果想要默认文档名为f......
  • IIS的基本安装和配置
    实验介绍:IIS的作用IIS是web服务器中常见的一种。当客户端想访问某个域名时,向web服务器发出请求。web服务器返回网页的代码做出回应。客户端解析代码生成网页。一:安装IIS1.打开一台windows服务器,修改IP为192.168.1.2082.打开服务器管理器,安装web服务器(IIS)二:web服务器绑定IP......
  • ASP 与iis基础漏洞
    1ASP安全在早期我们在windows上搭建服务器使用的是windows,iis,asp,access(sqlserver),他们几个分别是操作系统,中间件,编程语言,数据库,类比我们先前学习的NAMP,是同一类事物,本篇来学习ASP安全。1.1access脱库由于access数据库文件格式一般有.mdb.asp.asa该文件放在网站目......
  • ASCII 编码表----字符与对应十进制值的参考表
    字符十进制值-----------------NUL0SOH1STX2ETX3EOT4ENQ5ACK6BEL7BS8TAB9LF10VT11FF12CR13SO14SI15DLE16DC117DC218DC319DC420NA......
  • 代码随想录算法训练营第十三天 | 59.螺旋矩阵II 209.长度最小的子数组 977.有序数
    977.有序数组的平方 已解答简单 相关标签相关企业 给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。 示例1:输入:nums=[-4,-1,0,3,10]输出:[0,1,9,16,100]解释:平方后,数组变为[16......