csp真题 202109-2非零段划分C++代码(100分)

试题编号: 202109-2
试题名称: 非零段划分
时间限制: 1.0s
内存限制: 512.0MB
在这里插入图片描述
在这里插入图片描述

样例1输入

11
3 1 2 0 0 2 0 4 5 0 2

样例1输出

5

样例1解释
p=2时,A=[3,0,2,0,0,2,0,4,5,0,2],5个非零段依次为[3]、[2]、[2]、[4、5]和[2];此时非零段个数达到最大。

样例2输入

14
5 1 20 10 10 10 10 15 10 20 1 5 10 15

样例2输出

4

样例2解释
p=12时,A=[0,0,20,0,0,0,0,15,0,20,0,0,0,15],4个非零段依次为[20]、[15]、[20]和[15];此时非零段个数达到最大。

样例3输入

3
1 0 0

样例3输出

1

样例3解释
p=1时,A=[1,0,0],此时仅有1个非零段[1],非零段个数达到最大。

样例4输入

3
0 0 0

样例4输出

0

样例4解释
无论p取何值,A都不含有非零段,故非零段个数至多为0。
在这里插入图片描述
70分代码及思路:
思路:
1.将所有数据存储到一个数组A中,并记录最大值max_A;
2.p从1开始遍历到最大值max_A,记录每一次p值下的非零段的个数最大值到数组max1中。
3.判断非零段个数:遍历数组,找到每一个不为0的值,如果该数前一个数为0或者该数是数组的第一个数,非零段个数加1。
4.遍历数组max1,输出最大值。
分析:
该方法属于常规思路,比较简单,无任何算法优化,有很多循环遍历,且有双层循环,由题目给出的数据范围,在双层循环中,循环次数有可能达到10^9,显然会超时。

#include <iostream> 
using namespace std;int main() 
{int n;int i=0,p=0,max_A=0,max=0;cin>>n;int A[n]={0};for(i=0;i<n;i++){cin>>A[i];if(A[i]>max_A)	//记录数组A中的最大值 {max_A=A[i];}}int max1[max_A]={0};	//开辟数组用来存储每一个p值下的非零段的最大值 for(p=1;p<max_A;p++)	//p从1开始遍历 {for(i=0;i<n;i++)	//将数组中小于p的数置为0 {if(A[i]<p){A[i]=0;}}for(i=0;i<n;i++)	//遍历数组 {if(A[i]!=0){//若不为0,判断是否是数组的第一个数或者该数的前一个数为0,如果是,非零段加1 if(i==0||A[i-1]==0){max=max+1;}}}max1[p]=max;max=0;}for(i=1;i<max_A;i++)	if(max1[i]>max){max=max1[i];}cout<<max;return 0;
}

提交结果如下:
在这里插入图片描述
如果要拿到满分,那么用常规的思路逻辑肯定不行,必须要做一定的优化处理,在参考b站视频教程后整理如下:
1.读入数组时插入set,对数组进行去重和排序,(方便p值的选取)。
2.利用向量vector,将set集合中每个元素出现的位置存储在同一个vector向量中。
3.统计初始的非零段个数作为参考值。
(与前一种方法有点区别,在数组开头和最后加0,只需判断当前数不为0并且前一位数为0,非零段个数加1即可)
4.p依次从set中取值(从小到大)(如果值为0,跳过),依据位置向量获得每个值在数组A中的位置。
将对应位置的值赋值为0
如果该位置的前后的值都大于0,则非零段数加1;
如果该位置的前后的值都等于0,则非零段数减1;
其他情况下非零段个数不变。

更新非零段的最大值。
该方法的优点在于:
通过向量对应的位置坐标,判断坐标位置前后元素的值进行判断即可,不必在每一个p值下都对数组进行循环遍历,降低了时间复杂度。
此方法思路来源b站,可参考b站视频内容

满分代码:

#include <bits/stdc++.h>
using namespace std;int A[500002]= {0};
vector<int> Vector[10001];
set<int> Set;int main() {int n;cin>>n;for(int i=1; i<=n; i++) {cin>>A[i];Set.insert(A[i]);Vector[A[i]].push_back(i);}int number=0;	//非零段个数for(int i=1; i<=n; i++) {	//找出当前非零段的个数if((A[i]>0)&&(A[i-1]==0))number++;}int temp;int number_max;	//非零段个数的最大值temp=number_max=number;set<int>::iterator p=Set.begin();//用迭代器来访问set集合//p的值从集合开始遍历if(*p==0)		//如果集合中的元素为0,则直接从下一个元素开始p++;for(p; p!=Set.end(); p++) {vector<int> &Vector1=Vector[*p];	//引用Vector[*p]为Vector1 for(int i=0; i<Vector1.size(); i++) {	//集合中该元素出现的总次数int k=Vector1[i];	A[k]=0;if((A[k-1]!=0)&&(A[k+1]!=0))temp++;if((A[k-1]==0)&&(A[k+1]==0))temp--;}number_max=max(number_max,temp);}cout<<number_max<<endl;return 0;}

提交结果如下:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/429196.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c++中四舍五入取整、向上取整和向下取整问题

方法一&#xff1a;利用c函数 四舍五入&#xff1a;round()函数 向上取整&#xff1a;ceil()函数 向下取整&#xff1a;floor()函数 #include <iostream> #include <cmath>//函数头文件 using namespace std; int main() {double a1.2;double b3.7;cout<<&q…

SQL PROMPT5.3.4.1的一些设置选项

摘自&#xff1a;http://www.cnblogs.com/furenjian/p/4519426.html sql prompt这个工具安装好之后就可以在SSMS里使用代码提示功能 园子里非常多的文章&#xff1a;例如SQLSERVER开发利器XXXXXX http://www.cnblogs.com/VAllen/archive/2012/09/08/SQLPrompt.html http://www.…

csp真题202112-1 序列查询 (100分)

#include <iostream> using namespace std; int A[1000000]{0};//c中一定一定要要记得给变量赋初始值&#xff0c;会减少很多不必要的麻烦 //尽可能将数组量大的数组定义在函数外面&#xff0c;不要在函数内部定义大数组 int main() {int n0,N0,sum0,i0;cin>>n&g…

云麦小米华为体脂秤怎么样_测评华为智能体脂秤,比小米智能体重秤贵30元到底差别在哪里?...

“流浪的好奇”每天更新最新科技资讯和产品测评内容&#xff0c;欢迎您关注订阅&#xff01;我们之前说过华为可不仅仅只有5G通讯技术和智能手机&#xff0c;华为杂货铺里的产品虽然不如小米杂货铺那么的丰富&#xff0c;但是也不是空铺一个&#xff0c;还是有一些华为主业之外…

c++中引用和指针的区别

指针是指向一块内存&#xff0c;它的内容是所指内存的地址&#xff1b; 而引用则是指向某块内存变量的一个别名&#xff0c;相当于变量的另一个名字。 例如&#xff1a; #include <stdio.h> int main() {int a2;int &ba;printf("a:%d\n",a);printf("…

什么是大数据,怎么理解和应对大数据时代

什么是大数据&#xff0c;怎么理解和应对大数据时代 在大数据与深度学习中蝶化的人工智能。当代人工智能离不开大数据和深度学习算法。我们先来了解什么是大数据&#xff0c;大数据的本质是什么&#xff0c;在大数据时代我们应该如何应对&#xff1f; 当我们谈论数据的时候我们…

android 手机获取公网ip_KSWEB 旧手机搭建网站服务

? 感谢你阅读「 Android 应用 」的第 113篇分享文章KSWEB 是一款由俄罗斯开发者开发的一款可以在 Android 手机上安装建站相关服务的应用&#xff0c;支持 Lighttpd、Nginx、Apache、MySQL、FTP、PHP 等。打开应用后点击不再提醒忽略弹窗&#xff0c;给予权限后等待片刻按照提…

phpStydy配置memcache扩展

phpStydy配置memcache扩展 先提示一点&#xff1a;我电脑是win7 64 位的&#xff0c;但我用的环境是phpstudy (php5.6nginx); 下面的下载里我下载64位软件安装后没反映&#xff0c;因为phpstudy环境是32位的,下载32位安装后memcache就成功了; 一、下载并安装memcached服务器端软…

外部仓库_仓库主要作业流程和WMS作业优化方案

仓库在人们眼中一直是低效、高成本的地方&#xff0c;即便是增加人手也很难做好仓库管理。那么我们应该采取哪些方式来管理&#xff0c;才能做到降本增效呢&#xff1f;首先我们需要先了解仓库主要作业流程及在作业中存在的痛点。1入库流程a.商品SKU太多&#xff0c;部分形状相…

java IO流(上)

1.字节流 1.1 IO流概述和分类【理解】 1.IO流介绍 IO&#xff1a;输入/输出(Input/Output)流&#xff1a;是一种抽象概念,是对数据传输的总称.也就是说数据在设备间的传输称为流,流的本质是数据传输IO流就是用来处理设备间数据传输问题的.常见的应用: 文件复制; 文件上传; 文…

《科技之巅2》序——机器智能数据智能:工具之王

原文链接 “凡是过去&#xff0c;皆为序曲。”——莎士比亚 通过不断发明工具&#xff0c;人类科技指数级进化。语言汇聚原始部落&#xff0c;马镫开启了中世纪的欧洲文明&#xff0c;“高产种子”引发人口爆炸&#xff0c;蒸汽机创造工业文明&#xff0c;大规模集成电路激活数…

一、java面向对象基础

1. 类和对象 面向对象和面向过程的思想对比 : ​ 面向过程 &#xff1a; 是一种以过程为中心的编程思想&#xff0c;实现功能的每一步&#xff0c;都是自己实现的 ​ 面向对象 &#xff1a; 是一种以对象为中心的编程思想&#xff0c;通过指挥对象实现具体的功能 1.1 类和对…

pythom打包文件太大_从SQL注入到整站打包与本地搭建

一、前言如题&#xff0c;由于是在已知有一处sql注入的情况下才接手进行的后续操作&#xff0c;因此前面信息搜集则一笔带过。二、信息搜集目标是个本地的传销站点其大致信息为IISASP.NET安全狗、腾讯云。三、Bypass Sql3.1 Fuzz空格 error 加号 未拦截 等号 er…

二、常用API——String类和StringBuilder类

1.API 1.1 API概述-帮助文档的使用 什么是API ​ API (Application Programming Interface) &#xff1a;应用程序编程接口 java中的API ​ 指的就是 JDK 中提供的各种功能的 Java类&#xff0c;这些类将底层的实现封装了起来&#xff0c;我们不需要关心这些类是如何实现的&a…

iphone复制不能全选_忘记Apple ID密码,如何直接在 iPhone 上更改?

最近有不少同学问我&#xff0c;如果忘记了 Apple ID 的密码&#xff0c;怎么能直接在 iPhone 上修改&#xff1f;别急&#xff0c;我现在就教你如果之前已经在 iPhone 上登录过你的账户&#xff0c;并且已经将 iPhone 设置为「受信任设备」&#xff0c;那么就可以直接在 iPhon…

nginx 上传 文件超时设置_Nginx在高并发下的性能优化点!有这篇就够了!

点击上方“java进阶架构师”&#xff0c;选择右上角“置顶公众号”20大进阶架构专题每日送达前面几周&#xff0c;讲过Nginx的日志配置&#xff1a;Nginx | 超详细&#xff01;Nginx 日志配置实践&#xff0c;然后也讲了Nginx的进程模型&#xff0c;底层原理等&#xff1a;Ngin…

四、java面向对象高级——分类和分包思想、static关键字

1.案例驱动模式 1.1案例驱动模式概述 (理解) 通过我们已掌握的知识点,先实现一个案例,然后找出这个案例中,存在的一些问题,在通过新知识点解决问题 1.2案例驱动模式的好处 (理解) 解决重复代码过多的冗余,提高代码的复用性解决业务逻辑聚集紧密导致的可读性差,提高代码的可…

五、java面向对象高级——java中的继承和抽象类

1. 继承 1.1 继承的实现&#xff08;掌握&#xff09; 继承的概念 继承是面向对象三大特征之一&#xff0c;可以使得子类具有父类的属性和方法&#xff0c;还可以在子类中重新定义&#xff0c;以及追加属性和方法 实现继承的格式 继承通过extends实现格式&#xff1a;class 子…

万丰科技机器人排名_2020年全国机器人企业数量大排名(省份榜|9月)

点击上方兔子岛关注浩然哥原创不易 欢迎分享转载请注明出处作者&#xff1a;浩然哥2020年全国机器人企业数量大排名省份榜|9月大家好&#xff0c;《全国机器人企业数量大排名》又和大家见面了。本期是2020年省份榜的9月份榜单。2020年年底了&#xff0c;近期7月、9月、11月&am…

php函数scandir_PHP函数glob:扫描目录文件更好的方式

如果想要扫描一个目录下的文件&#xff0c;以及目录&#xff0c;应该怎么做呢。大家第一印象&#xff0c;可能是 scandir &#xff0c;这个函数用来扫描给定路径下的文件列表&#xff0c;用法示例如下&#xff1a;array scandir ( string $directory [, int $sorting_order [, …