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

洛谷P1182 数列分段 Section II

时间:2024-08-22 17:16:59浏览次数:6  
标签:满足条件 cnt 洛谷 数列 int Section II check 前缀

传送门:P1182 数列分段 Section II

消灭人类暴政,世界属于三体

题目意思:

题目说的很明白了

思路:

考虑部分分:

  • 20% 的数据保证 n < 10,直接爆搜;
  • 40% 的数据保证 n < 1000,n^2 + 前缀和 搞定

100% 的数据:

求每段最大和的最小值:明显的二分(n在 10^5 的范围也说明了这一点,因为二分查找的复杂度是 nlogn 的)
所以我们要二分答案。
左边界是最大值的值,右边界是所有数的和。
问题就是 check 函数的写法。 蒟蒻想了好久才明白 qwq

考虑什么样的答案是不满足条件的
就是这个答案不能保证整个数列能被分成 k 段;

  • 分成了 k 段,一定满足条件;
  • 分成的数列 < k 段时,我们可以通过再分某一个数列使它 = k 段,可以看作满足条件;
  • 但是分成的数列 > k 段时,就不满足条件了。

然后就能写代码了?
(蒟蒻本来还以为要用前缀和。。一直没想出来前缀和做法。。看了看题解发现居然不用前缀和?)

代码:

#include<bits/stdc++.h>

using namespace std;

#define int long long

int n,k;
int l,r;
int a[100010];

bool check(int x)
{
	int sum=0,cnt=1;//注意!因为到最后就算还满足条件也要分一段了 (因为这个喜提 20)
	for(int i=1;i<=n;i++)
	{
		sum+=a[i];
		if(sum>x){
			cnt++;
			if(cnt>k)return false; //cnt 表示被分成的段数
			sum=a[i];
		} 
	}
	return true; 
}

signed main()
{
	cin>>n>>k;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
		l=max(l,a[i]);
		r+=a[i];
	}
	while(l<r)
	{
		int mid=l+r>>1;
		if(check(mid))r=mid;
		else l=mid+1;
	}
	cout<<l<<endl;
	return 0;
}

后记?

二分答案一眼看出来了,check函数半天没想起来。。。
太菜了,还是要多练啊

标签:满足条件,cnt,洛谷,数列,int,Section,II,check,前缀
From: https://www.cnblogs.com/lazy-ZJY0307/p/18374357

相关文章

  • 数字集成电路设计实践 IIC-Slave接口芯片的全流程设计
    数字集成电路设计实践 IIC-Slave接口芯片的全流程设计一、芯片设计方案IIC原理1.I2C协议I2C协议由Philips公司推出。1.1. 端口名称及含义标准I2C只有2根信号线。SCL:SerialCLock:串行时钟线,由主机产生并分享给从机。SDA:SerialDAta:串行数据线,连接在主从机之间。把发送......
  • day8字符串:344.反转字符串|541. 反转字符串II|卡码网:54.替换数字
    344.ReverseStringclassSolution{//extrao1spacepublicvoidreverseString(char[]s){intleft=0;intright=s.length-1;while(left<right){chartemp=s[left];s[left]=s[right];......
  • .Net8 部署到IIS 10 上需要注意的点
    现在大部分项目都上云了,而且是linux的系统,这部分我下一篇再讲,这次讲一下如何部署到iis10,首先项目点击发布-》目标框架.net8部署模式是独立,目标运行时是win-x64,你也可以选择部署模式为依赖框架,目标运行时选择可移植,但是这样的话要注意IIS的应用程序池选择启用32位应用程序,如果是......
  • 洛谷P1540 [NOIP2010 提高组] 机器翻译答案
    #include<bits/stdc++.h>usingnamespacestd;/*数据结构:队列queue 桶:标记某个单词是否出现在内存中 t[i]=false:不在t[i]=true:在对于读入的每个单词x: 如果不存在单词x 存储(入队) t[x]=true 内存中元素个数(q.size())>M: t[q.front()]=falses; ......
  • 代码随想录 -- 数组 -- 螺旋矩阵II
    59.螺旋矩阵II-力扣(LeetCode)每画一条边都要坚持一致的左闭右开注意处理n为奇数时的矩阵中心点classSolution(object):defgenerateMatrix(self,n):res=[[0]*nforainrange(n)]startX=0startY=0loop=mid=n/2c......
  • UCOSII移植
    1.准备一个裸机基础工程2.新建UCOSII文件夹CFG文件CORE文件PORT文件添加工程    SYS文件.c#include"sys.h"// //本程序只供学习使用,未经作者许可,不得用于其它任何用途//ALIENTEKMiniSTM32开发板//系统中断分组设置化 //正点原子@ALIENTEK/......
  • 洛谷 P2590 [ZJOI2008] 树的统计 题解
    题目大意给你一个\(N\),然后再给你两个长度为\(N\)的序列。让你构造一个仅有\(0\)和\(1\)的\(N\timesN\)的正方形,但是要满足两个序列的顺序:第一个序列指的是该正方形每一行所构成的二进制数的大小顺序。第二个序列指的是该正方形每一列所构成的二进制数的大小顺序。......
  • Java毕设项目II基于Java新闻稿件管理系统
    目录一、前言二、技术介绍三、系统实现四、论文参考五、核心代码六、源码获取全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末一、前言在信息爆炸的时代,新闻稿件的高效管理与快......
  • IIS: URL rewrite转发请求
    先检查本地是否存在IIS,存在则跳过IIS:启用IIS-le.li-博客园(cnblogs.com)双击打开"InternetInformationServices(IIS)管理器" 点击管理器名称 缺少“ApplicationRequestRouter”下载网址:https://www.iis.net/downloads/microsoft/application-request-routi......
  • IIS:启用IIS
    检查IIS是否已启用没有安装前,控制面板,管理工具里,看不到IIS相关内容启用IIS 启用步骤控制面板->程序  启用或关闭windows功能找到"InternetInformationServices""InternetInformationServices可承载的Web核心"如果不知道用啥,全部勾选也可以(占资源多) 详细勾......