题目链接:非零段划分

题目描述

A1,A2,⋯,An 是一个由 n 个自然数(非负整数)组成的数组。我们称其中 Ai,⋯,Aj 是一个非零段,当且仅当以下条件同时满足:

  • 1≤i≤j≤n;
  • 对于任意的整数 k,若 i≤k≤j,则 Ak>0;
  • i=1 或 Ai−1=0;
  • j=n 或 Aj+1=0。

下面展示了几个简单的例子:

  • A=[3,1,2,0,0,2,0,4,5,0,2] 中的 4 个非零段依次为 [3,1,2]、[2]、[4,5] 和 [2];
  • A=[2,3,1,4,5] 仅有 1 个非零段;
  • A=[0,0,0] 则不含非零段(即非零段个数为 0)。

现在我们可以对数组 A 进行如下操作:任选一个正整数 p,然后将 A 中所有小于 p 的数都变为 0。试选取一个合适的 p,使得数组 A 中的非零段个数达到最大。若输入的 A 所含非零段数已达最大值,可取 p=1,即不对 A 做任何修改。

输入格式

从标准输入读入数据。

输入的第一行包含一个正整数 n。

输入的第二行包含 n 个用空格分隔的自然数 A1,A2,⋯,An。

输出格式

输出到标准输出。

仅输出一个整数,表示对数组 A 进行操作后,其非零段个数能达到的最大值。

样例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% 的测试数据满足 n≤1000;

全部的测试数据满足 n≤5×10^5,且数组 A 中的每一个数均不超过 10^4。


初版无脑暴力代码……有70分诶2333

#include <iostream>
#include <algorithm>
using namespace std;int main()
{int n;cin>>n;int* a=(int*)malloc(sizeof(int)*n);int* b=(int*)malloc(sizeof(int)*n);int* c=(int*)malloc(sizeof(int)*n);for(int i=0;i<n;i++){cin>>a[i];b[i]=a[i];c[i]=a[i];}sort(b,b+n);int p=0,num=0,max=-1;for(int i=0;i<n;i++){p=b[i];while(p==b[i]){i++;}i--;for(int j=0;j<n;j++){if(c[j]<p){c[j]=0;}}num=0;for(int j=0;j<n;j++){if(c[j]!=0){num++;while(c[j]!=0){j++;}j--;}}if(num>max){max=num;}for(int j=0;j<n;j++){c[j]=a[j];}}if(max==-1){max=0;}cout<<max;return 0;
}

把自己能找到的可以优化的地方都改了之后……依然超时,还是70分

#include <iostream>
#include <cstdio>
#include <set>
using namespace std;int main()
{int n;scanf("%d",&n);int* a=(int*)malloc(sizeof(int)*n);set<int> b;for(int i=0;i<n;i++){scanf("%d",&a[i]);b.insert(a[i]);}int p=0,num=0,max=0;for(set<int>::iterator it=b.begin();it!=b.end();it++){p=*it;if(p==0){continue;}num=0;for(int j=0;j<n;j++){if(a[j]<p){a[j]=0;}if(a[j]>=p){num++;while(a[j]>=p){j++;}j--;}}if(num>max){max=num;}}printf("%d",max);return 0;
}

没事没事!作为小白还是学到了新知识的!记一下笔记

对小白很友好的详细介绍:

(23条消息) STL set 基本介绍_郑丹丹的博客-CSDN博客

(23条消息) STL中的set使用方法详细!!!!_知足常乐的博客-CSDN博客

关于访问set元素的介绍:

(23条消息) set容器内元素的访问_Running Snail-CSDN博客_访问set元素

(23条消息) STL中的set---可以直接修改set中的元素么?_认知 行动 坚持-CSDN博客

//访问set元素
for(set<int>::iterator it=st.begin();it!=st.end();it++)
{cout<<*it<<" ";
}

最后学习了大佬的解法!

(23条消息) csp2021-09-2 非零段划分_隔壁李叟的博客-CSDN博客

这个比喻真的好好!一下子就把意思说清楚了√

虽然反射弧长的我还是盯着代码看了好久才反应过来是怎么实现的而且下次让我写我可能还是不会

笔记笔记

unique()函数

#include <algorithm>

这是更具体的介绍:

(23条消息) C++中的unique函数_simao-CSDN博客

(23条消息) unique()函数详解_大胡子的博客-CSDN博客_unique

【整理】C++中的unique函数 - nimphy - 博客园 (cnblogs.com)

(小小声,这篇博客的界面好好看喔,打开之后和右下角的小人玩了好久才想起来看讲解XD

CSP 202109-2 非零段划分相关推荐

  1. CSP:CSP认证考试:202109-2(非零段划分)70分答案,Java版

    CSP:CSP认证考试:202109-2(非零段划分)70分答案,Java版 一.题目: 二.Java70分答案 import java.util.ArrayList; import java.uti ...

  2. 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 ...

  3. CCF202109-2 非零段划分(100分)【序列处理】

    试题编号: 202109-2 试题名称: 非零段划分 时间限制: 1.0s 内存限制: 512.0MB 问题描述: 题目描述 A1,A2,-,An是一个由 n 个自然数(非负整数)组成的数组.我们称其 ...

  4. CCF202109-2 非零段划分

    主要用到差分法 借用岛屿情况来分析这个题.考虑p足够大的情况,所有的数都被海水淹没了,只有0个岛屿.然后,海平面逐渐下降,岛屿数量出现变化.每当一个凸峰出现,岛屿数就会多一个:每当一个凹谷出现,原本相 ...

  5. 非零段划分(CSP202109-2)

    非零段划分 题目链接 题目描述: 输入格式: 输出格式: 样例1: 输入: 11 3 1 2 0 0 2 0 4 5 0 2 输出: 5 样例2: 输入: 14 5 1 20 10 10 10 10 ...

  6. 非零基础自学计算机操作系统 第1章 操作系统概述 习题一

    非零基础自学计算机操作系统 第1章 操作系统概述 习题一 [1]什么是操作系统?操作系统有哪些特性? 答:操作系统是管理计算机硬件与软件资源的计算机程序,它的主要特性有并发性.易用性.稳定性和异步性. ...

  7. 非零基础自学计算机操作系统 第1章 操作系统概述 1.4 操作系统的分类 1.4.1 多道批处理操作系统 1.4.2 分时操作系统

    非零基础自学计算机操作系统 文章目录 非零基础自学计算机操作系统 第1章 操作系统概述 1.4 操作系统的分类 1.4.1 多道批处理操作系统 1.4.2 分时操作系统 第1章 操作系统概述 1.4 ...

  8. Keil MDK下如何设置非零初始化变量(转)

    源:Keil MDK下如何设置非零初始化变量 一些工控产品,当系统复位后(非上电复位),可能要求保持住复位前RAM中的数据,用来快速恢复现场,或者不至于因瞬间复位而重启现场设备.而keil mdk在默 ...

  9. 网络故障解决方案之非标准子网划分【网管员必懂】

    网络故障解决方案之非标准子网划分 一个组织申请了一段IP地址后,可能需要对IP地址进行进一步的子网划分.例如,某规模较大的公司申请了一个B类IP地址166.133.0.0.如果采用标准子网掩码255. ...

最新文章

  1. UI设计师必备技能,看看你都学会了吗?
  2. Python系统命令操作
  3. python中的轻量级定时任务调度库:schedule
  4. Twitter4j和Esper:在Twitter上跟踪用户情绪
  5. python 跳过计算错误_在python中计算分数时如何跳过被0除的错误?
  6. 大一报了c语言班要买电脑吗,少儿编程课程要自己买电脑吗
  7. 关于vmware虚拟机硬件里没有软盘驱动器,而操作系统里还有的解决方法
  8. Linux上mysql安装详细教程
  9. linux文件系统变为只读的修复
  10. Postman 导出 curl命令 到命令行运行 Mac OS
  11. 程序员的浪漫之——情侣日常小程序
  12. 将知网caj格式转换成pdf格式
  13. Oracle错误一览表4
  14. 2023展望未来的stripe经验之谈
  15. #734. 徐老师的养花装置
  16. 智能家居平台软件测试,智能家居 | 智能家居管理系统测试具体都有哪些流程?...
  17. 动态图表交互揭秘:制作选择器的奥秘
  18. Linux系统收费吗?好不好?
  19. Cesiumjs(一)原生cesiumjs集成进入vue框架
  20. 运营QQ公众平台的正确姿势

热门文章

  1. 亚马逊html怎么上传,亚马逊 帮助: 如何上传“在线试读”文件
  2. 地铁杂记 - 风寒咳嗽
  3. IE浏览器下载文件会自动打开,无弹框保存
  4. Segmenting tree crowns from terrestrial and mobile LiDAR data by exploring ecological theories
  5. private static final long serialVersionUID = 1L详解
  6. 写论文的神仙网站推荐!
  7. photoshopcs6文件的基本操作
  8. 对原始图像,加上噪声,以及平滑后的三种图像分别进行拉普拉斯锐化,最后比较锐化效果
  9. mysql做十亿条数据查询_数据库优化:mysql数据库单机数十亿数据查询设计
  10. HTML旋转相册(520表白神器)