[蓝桥杯] 枚举、模拟和排列问题
文章目录
一、连号区间数
1、1 题目描述
1、2 题解关键思路与解答
二、递增三元组
2、1 题目描述
2、2 题解关键思路与解答
三、错误票据
3、1 题目描述
3、2 题解关键思路与解答
四、回文日期
4、1 题目描述
4、2 题解关键思路与解答
五、归并排序
标题:蓝桥杯——枚举、模拟和排列习题训练
作者:@Ggggggtm
寄语:与其忙着诉苦,不如低头赶路,奋路前行,终将遇到一番好风景
一、连号区间数
1、1 题目描述
题目来源:第四届蓝桥杯省赛C++B组,第四届蓝桥杯省赛JAVAB组
题目难度:简单
题目描述:
小明这些天一直在思考这样一个奇怪而有趣的问题:
在 1∼N 的某个排列中有多少个连号区间呢?
这里所说的连号区间的定义是:
如果区间 [L,R] 里的所有元素(即此排列的第 L 个到第 R 个元素)递增排序后能得到一个长度为 R−L+1 的“连续”数列,则称这个区间连号区间。
当 N 很小的时候,小明可以很快地算出答案,但是当 N 变大的时候,问题就不是那么简单了,现在小明需要你的帮助。
输入格式:
第一行是一个正整数 N,表示排列的规模。
第二行是 N 个不同的数字 Pi,表示这 N 个数字的某一排列。
输出格式:
输出一个整数,表示不同连号区间的数目。
数据范围:
1≤N≤10000,
1≤Pi≤N输入样例1:
4 3 2 4 1
输出样例1:
7
输入样例2:
5 3 4 2 5 1
输出样例2:
9
样例解释:
第一个用例中,有 77 个连号区间分别是:[1,1],[1,2],[1,3],[1,4],[2,2],[3,3],[4,4][1,1],[1,2],[1,3],[1,4],[2,2],[3,3],[4,4]
第二个用例中,有 99 个连号区间分别是:[1,1],[1,2],[1,3],[1,4],[1,5],[2,2],[3,3],[4,4],[5,5]
1、2 题解关键思路与解答
首先,我们仔细阅读题目。题中提到了1∼N 的某个排列,注意是排列,所以是1∼N 中没有重复的数据,且所有数据都会出现一次。题目大概意思是给我们一组数据,是乱序的。然后我们需要在这组数据中任选一段连续区间,看是否能组成“连续”数列。我们第一想到的是两层for循环枚举区间,在对区间排序,判断是否为“连续”数列。这样时间复杂度显然是不能通过题中所有案例的。我们仔细观察,区间数值不会重复,那么区间的最大值减去区间的最小值等于区间下标相减。这样大大提高了效率,我们结合代码一起理解一下。
#include<iostream>
#include<algorithm>
#include<cstring>using namespace std;int n;const int N =10010;
const int MAX=-1e8,MIN=1e8;int a[N];int main()
{cin>>n;for(int i=0;i<n;i++)cin>>a[i];int res=0;for(int i=0;i<n;i++){int maxc=MAX,minc=MIN;for(int j=i;j<n;j++){maxc=max(maxc,a[j]);minc=min(minc,a[j]);if(maxc-minc==j-i)res++;}}cout<<res<<endl;return 0;
}
二、递增三元组
2、1 题目描述
题目来源:第九届蓝桥杯省赛C++B组,第九届蓝桥杯省赛JAVAB组
题目难度:简单
题目描述:
给定三个整数数组
A=[A1,A2,…AN],
B=[B1,B2,…BN],
C=[C1,C2,…CN],请你统计有多少个三元组 (i,j,k) 满足:
- 1≤i,j,k≤N
- Ai<Bj<Ck
输入格式:
第一行包含一个整数 N。
第二行包含 N 个整数 A1,A2,…AN。
第三行包含 N 个整数 B1,B2,…BN。
第四行包含 N 个整数 C1,C2,…CN。
输出格式
一个整数表示答案。
数据范围
1≤N≤1e5,
0≤Ai,Bi,Ci≤1e5。输入样例:
3 1 1 1 2 2 2 3 3 3
输出样例:
27
2、2 题解关键思路与解答
这道题的暴力枚举的方法很容易想到,直接三层循环,进行比较。但是时间复杂度为O(N^3),是不能全部通过测试用例的。我们仔细分析题目。题目要求:Ai<Bj<Ck。这里A和C都需要与B进行比较,且A和C不产生直接联系。所以我们只需要枚举Bj,然后找所有Ai比Bj小的数,所有Ck比Bj大的数即可。我们这里利用了前缀和来找值,优化了时间复杂度。最后将得到的两个数据直接相乘即为答案,我们看代码。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>using namespace std;const int N=1e5+10;typedef long long LL;int n;int a[N],b[N],c[N];int as[N],cs[N]; //分别表示的是比b[i]小的个数和比b[i]大的个数
int cnt[N],s[N];int main()
{cin>>n;for(int i=0;i<n;i++){scanf("%d",&a[i]);a[i]++;}for(int i=0;i<n;i++){scanf("%d",&b[i]);b[i]++;}for(int i=0;i<n;i++){scanf("%d",&c[i]);c[i]++;}//求as[]for(int i=0;i<n;i++)cnt[a[i]]++;for(int i=1;i<N;i++)s[i]=s[i-1]+cnt[i];for(int i=0;i<n;i++)as[i]=s[b[i]-1];memset(cnt,0,sizeof(cnt));memset(s,0,sizeof(s));//求cs[]for(int i=0;i<n;i++)cnt[c[i]]++;for(int i=1;i<N;i++)s[i]=s[i-1]+cnt[i];for(int i=0;i<n;i++)cs[i]=s[N-1]-s[b[i]];LL res=0;for(int i=0;i<n;i++)res+=(LL)as[i]*cs[i];cout<<res<<endl;return 0;
}
三、错误票据
3、1 题目描述
题目来源:第四届蓝桥杯省赛C++A/B组,第四届蓝桥杯省赛JAVAA/B组
题目难度:简单
题目描述:
某涉密单位下发了某种票据,并要在年终全部收回。
每张票据有唯一的ID号。
全年所有票据的ID号是连续的,但ID的开始数码是随机选定的。
因为工作人员疏忽,在录入ID号的时候发生了一处错误,造成了某个ID断号,另外一个ID重号。
你的任务是通过编程,找出断号的ID和重号的ID。
假设断号不可能发生在最大和最小号。
输入格式:
第一行包含整数 N,表示后面共有 N 行数据。
接下来 N 行,每行包含空格分开的若干个(不大于100个)正整数(不大于100000),每个整数代表一个ID号。
输出格式:
要求程序输出1行,含两个整数 m,n,用空格分隔。
其中,m表示断号ID,n表示重号ID。
数据范围:
1≤N≤100,
输入样例:
2 5 6 8 11 9 10 12 9
输出样例:
7 9
3、2 题解关键思路与解答
我们先对所有数据进行排序。然后我们会发现连号和中间缺少一个都是有特点的。连号是连续两个相等,中间缺少一个的特点是后一个减去前面一个的值为2。本题的难点是在读入。每行的个数不相同,且有多行,这就给我们的读入造成了很大的困难。我们在这里可以用getline对每行进行读入,最后再用户sscanf进行格式化输入。这样我们就可以解决问了。注意,在使用getline时,我们要想清楚现在的输入缓冲区是否还有 '\n'、空格之类的。我们结合代码理解一下。
#include<iostream>
#include<algorithm>
#include<sstream>
#include<cstring>using namespace std;const int N=10010;int n;
int a[N];int main()
{int cnt;cin>>cnt;string line;getline(cin,line);while(cnt--){getline(cin,line);stringstream ssin(line);while (ssin >> a[n]) n ++ ;}sort(a,a+n);int res1,res2;for(int i=1;i<n;i++)if(a[i]==a[i-1])res1=a[i];else if(a[i]==a[i-1]+2)res2=a[i]-1;cout<<res2<<' '<<res1<<endl;return 0;
}
四、回文日期
4、1 题目描述
题目来源:NOIP2016普及组
题目难度:简单
题目描述:
在日常生活中,通过年、月、日这三个要素可以表示出一个唯一确定的日期。
牛牛习惯用 8 位数字表示一个日期,其中,前 4 位代表年份,接下来 2 位代表月份,最后 2 位代表日期。
显然:一个日期只有一种表示方法,而两个不同的日期的表示方法不会相同。
牛牛认为,一个日期是回文的,当且仅当表示这个日期的 88 位数字是回文的。
现在,牛牛想知道:在他指定的两个日期之间(包含这两个日期本身),有多少个真实存在的日期是回文的。
一个 8 位数字是回文的,当且仅当对于所有的 i(1≤i≤8) 从左向右数的第 i 个数字和第 9−i 个数字(即从右向左数的第 i 个数字)是相同的。
例如:
- 对于 2016 年 11 月 19 日,用 8 位数字 20161119 表示,它不是回文的。
- 对于 2010 年 1 月 22日,用8 位数字 20100102 表示,它是回文的。
- 对于 2010年 10 月 2 日,用 8 位数字 20101002 表示,它不是回文的。
输入格式:
输入包括两行,每行包括一个 8 位数字。
第一行表示牛牛指定的起始日期 date1,第二行表示牛牛指定的终止日期 date2。保证date1 和 date2 都是真实存在的日期,且年份部分一定为 4 位数字,且首位数字不为 00。
保证 date1 一定不晚于 date2。
输出格式:
输出共一行,包含一个整数,表示在 date1 和 date2 之间,有多少个日期是回文的。
输入样例:
20110101 20111231
输出样例:
1
4、2 题解关键思路与解答
该题要求我们求一个年份区间的回文日期,好像很麻烦。我们先想想,题目中的日期统一为8位数字。前四位为年,后四位分别为月和天。我们不如直接枚举年份,从1000枚举到10000,然后通过年份制造出一个回文串。再去判断该回文串是否为合法日期。这样似乎做起来很简单。我们来看代码。
#include<iostream>
#include<cstring>
#include<algorithm>using namespace std;int days[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};bool check_date(int date)
{int year=date/10000;int month=date%10000/100;int day=date%100;if(month==0 || month>12)return false;if(day==0 || month != 2 && day>days[month])return false;if (month == 2){int leap = year % 100 && year % 4 == 0 || year % 400 == 0;if (day > 28 + leap) return false;}return true;
}
int main()
{int date,date1,date2;int res=0;cin>>date1>>date2;for(int i=1000;i<10000;i++){date=i;int x=i;for(int i=0;i<4;i++){date=date*10+x%10;x/=10;}if(date1<=date && date<=date2 && check_date(date))res++;}cout<<res<<endl;return 0;
}
五、归并排序
归并排序在蓝桥杯中也是有考到的,所以我们也要重点掌握。此篇文章:重点算法排序之快速排序、归并排序(上篇) 对归并排序做出了详解,可以参考学习。
今天的学习就到这里,希望以上的例题和讲解希望对你有所帮助,感谢阅读ovo~
相关文章:
[蓝桥杯] 枚举、模拟和排列问题
文章目录 一、连号区间数 1、1 题目描述 1、2 题解关键思路与解答 二、递增三元组 2、1 题目描述 2、2 题解关键思路与解答 三、错误票据 3、1 题目描述 3、2 题解关键思路与解答 四、回文日期 4、1 题目描述 4、2 题解关键思路与解答 五、归并排序 标题:蓝桥杯——…...
C++基础了解-02-C++ 数据类型
C 数据类型 一、C 数据类型 使用编程语言进行编程时,需要用到各种变量来存储各种信息。变量保留的是它所存储的值的内存位置。这意味着,当创建一个变量时,就会在内存中保留一些空间。 可能需要存储各种数据类型(比如字符型、宽…...
关于MSVCR100.dll、MSVCR100d.dll、Msvcp100.dll、abort()R6010等故障模块排查及解决方法
一、常见故障介绍 最近在开发相机项目(项目细节由于公司保密就不介绍了),程序运行5个来月以来首次出现msvcr100.dll故障等问题,于是乎开始了分析之路,按照度娘上的一顿操作,期间也是出现了各种不一样的问…...
【蓝桥杯集训·每日一题】AcWing 3305. 作物杂交
文章目录一、题目1、原题链接2、题目描述二、解题报告1、思路分析2、时间复杂度3、代码详解三、知识风暴Spfa算法一、题目 1、原题链接 3305. 作物杂交 2、题目描述 作物杂交是作物栽培中重要的一步。 已知有 N 种作物 (编号 1 至 N),第 i 种作物从播种到成熟的时间…...
深入浅出PaddlePaddle函数——paddle.to_tensor
分类目录:《深入浅出PaddlePaddle函数》总目录 相关文章: 深入浅出PaddlePaddle函数——paddle.Tensor 深入浅出PaddlePaddle函数——paddle.to_tensor 通过已知的data来创建一个Tensor,Tensor类型为paddle.Tensor。data可以是scalar、tupl…...
JavaScript高级程序设计读书分享之10章——函数
JavaScript高级程序设计(第4版)读书分享笔记记录 适用于刚入门前端的同志 定义函数 定义函数有两种方式:函数声明和函数表达式大致看这两种方式没有什么区别,事实上,JavaScript 引擎在加载数据时对它们是区别对待的。JavaScript 引擎在任何代…...
第八章 使用 ^%ZSTART 和 ^%ZSTOP 例程自定义启动和停止行为 - 设计注意事项
文章目录第八章 使用 ^%ZSTART 和 ^%ZSTOP 例程自定义启动和停止行为 - 设计注意事项设计注意事项第八章 使用 ^%ZSTART 和 ^%ZSTOP 例程自定义启动和停止行为 - 设计注意事项 IRIS 可以在特定事件发生时执行自定义代码。需要两个步骤: 定义 ^%ZSTART 例程、^%ZSTO…...
工作实战之拦截器模式
目录 前言 一、结构中包含的角色 二、拦截器使用 1.拦截器角色 a.自定义拦截器UserValidateInterceptor,UserUpdateInterceptor,UserEditNameInterceptor b.拦截器配置者UserInterceptorChainConfigure,任意组装拦截器顺序 c.拦截器管理者…...
某美颜app sig参数分析
之前转载过该app的文章,今天翻版重新整理下,版本号:576O5Zu56eA56eAYXBwIHY5MDgw (base64 解码)。 上来先抓个包: jadx搜索关键词 "sigTime",然后定位到这里 看这行代码 cVar.addForm(INoCaptchaComponent.sig, genera…...
Linux - Linux系统优化思路
文章目录影响Linux性能的因素CPU内存磁盘I/O性能网络宽带操作系统相关资源系统安装优化内核参数优化文件系统优化应用程序软件资源系统性能分析工具vmstat命令iostat命令sar命令系统性能分析标准小结影响Linux性能的因素 CPU CPU是操作系统稳定运行的根本,CPU的速…...
2.Elasticsearch入门
2.Elasticsearch入门[toc]1.Elasticsearch简介Elasticsearch是用Java开发并且是当前最流行的开源的企业级搜索引擎。 能够达到实时搜索,稳定,可靠,快速,安装使用方便。客户端支持Java、.NET(C#)、PHP、Pyth…...
RK3399平台开发系列讲解(应用开发篇)断言的使用
🚀返回专栏总目录 文章目录 一、什么是断言二、静态断言三、运行时断言沉淀、分享、成长,让自己和他人都能有所收获!😄 📢断言为我们提供了一种可以静态或动态地检查程序在目标平台上整体状态的能力,与它相关的接口由头文件 assert.h 提供。 一、什么是断言 在编程中…...
云原生系列之使用prometheus监控nginx
前言 大家好,又见面了,我是沐风晓月,本文主要讲解云原生系列之使用prometheus监控nginx 文章收录到 csdn 我是沐风晓月的博客【prometheus监控系列】专栏,此专栏是沐风晓月对云原生prometheus的的总结,希望能够加深自…...
第六届省赛——8移动距离(总结规律)
题目:X星球居民小区的楼房全是一样的,并且按矩阵样式排列。其楼房的编号为1,2,3...当排满一行时,从下一行相邻的楼往反方向排号。比如:当小区排号宽度为6时,开始情形如下:1 2 3 4 5 612 11 10 9 8 713 14 1…...
C++vector 简单实现
一。概述 vector是我们经常用的一个容器,其本质是一个线性数组。通过对动态内存的管理,增删改查数据,达到方便使用的目的。 作为一个线性表,控制元素个数,容量,开始位置的指针分别是: start …...
通用缓存存储设计实践
目录介绍 01.整体概述说明 1.1 项目背景介绍1.2 遇到问题记录1.3 基础概念介绍1.4 设计目标1.5 产生收益分析 02.市面存储方案 2.1 缓存存储有哪些2.2 缓存策略有哪些2.3 常见存储方案2.4 市面存储方案说明2.5 存储方案的不足 03.存储方案原理 3.1 Sp存储原理分析3.2 MMKV存储…...
sheng的学习笔记Eureka Ribbon
Eureka-注册中心Eureka简介官方网址:https://spring.io/projects/spring-cloud-netflixEureka介绍Spring Cloud 封装了 Netflix 公司开发的 Eureka 模块来实现服务注册和发现(请对比Zookeeper)。Zooleeper nacos.Eureka 采用了 C-S 的设计架构。Eureka Server 作为服…...
零代码工具我推荐Oracle APEX
云原生时代零代码工具我推荐Oracle APEX 国内的低码开发平台我也看了很多,感觉还是不太适合我这个被WEB抛弃的老炮。自从看了Oracle APEX就不打算看其它的了。太强大了,WEB服务器都省了,直接数据库到WEB页面。功能很强大,震撼到我…...
InstructGPT方法简读
InstructGPT方法简读 引言 仅仅通过增大模型规模和数据规模来训练更大的模型并不能使得大模型更好地理解用户意图。由于数据的噪声极大,并且现在的大多数大型语言模型均为基于深度学习的“黑箱模型”,几乎不具有可解释性和可控性,因此&…...
SpringCloud-5_模块集群化
避免一台Server挂掉,影响整个服务,搭建server集群创建e-commerce-eureka-server-9002微服务模块【作为注册中心】创建步骤参考e-commerce-eureka-server-9001修改pom.xml,加入依赖同9001创建resources/application.yml9002的ymlserver: # 修改端口号por…...
AQS底层源码深度剖析-BlockingQueue
目录 AQS底层源码深度剖析-BlockingQueue BlockingQueue定义 队列类型 队列数据结构 ArrayBlockingQueue LinkedBlockingQueue DelayQueue BlockingQueue API 添加元素 检索(取出)元素 BlockingQueue应用队列总览图 AQS底层源码深度剖析-BlockingQueue【重点中的重…...
Kotlin协程:Flow的异常处理
示例代码如下:launch(Dispatchers.Main) {// 第一部分flow {emit(1)throw NullPointerException("e")}.catch {Log.d("liduo", "onCreate1: $it")}.collect {Log.d("liudo", "onCreate2: $it")}// 第二部分flow …...
qt下ffmpeg录制mp4经验分享,支持音视频(h264、h265,AAC,G711 aLaw, G711muLaw)
前言 MP4,是最常见的国际通用格式,在常见的播放软件中都可以使用和播放,磁盘空间占地小,画质一般清晰,它本身是支持h264、AAC的编码格式,对于其他编码的话,需要进行额外处理。本文提供了ffmpeg录…...
C#读取Excel解析入门-1仅围绕三个主要的为阵地,进行重点解析,就是最理性的应对上法所在
业务中也是同样的功能点实现。只是多扩展了很多代码,构成了项目的其他部分,枝干所在。但是有用的枝干,仅仅不超过三个主要的!所以您仅仅围绕三个主要的为阵地,进行重点解析,就是最理性的应对上法所在了 str…...
一起Talk Android吧(第五百一十八回:在Android中使用MQTT通信五)
文章目录 知识回顾问题描述解决过程经验分享各位看官们大家好,这一回中咱们说的例子是" 在Android中使用MQTT通信五",本章回内容与前后章节内容无关联。闲话休提,言归正转,让我们一起Talk Android吧! 知识回顾 我们在前面章回中介绍了如何使用MQTT通信,包含它…...
100种思维模型之混沌与秩序思维模型-027
人类崇尚秩序与连续性,我们习惯于我们的日常世界,它以线性方式运作,没有不连续或突跳。 为此,我们学会了期望各种过程以连续方式运行,我们的内心为了让我们更有安全感,把很多事物的结果归于秩序,…...
Java开发 - Redis初体验
前言 es我们已经在前文中有所了解,和es有相似功能的是Redis,他们都不是纯粹的数据库。两者使用场景也是存在一定的差异的,本文目的并不重点说明他们之间的差异,但会简要说明,重点还是在对Redis的了解和学习上。学完本…...
Python - 使用 pymysql 操作 MySQL 详解
目录创建连接 pymsql.connect() 方法的可传参数连接对象 conn pymsql.connect() 方法游标对象 cursor() 方法使用示例创建数据库表插入数据操作数据查询操作数据更新操作数据删除操作SQL中使用变量封装使用简单使用: import pymysqldb pymysql.connect(host,user…...
机器学习-卷积神经网络CNN中的单通道和多通道图片差异
背景 最近在使用CNN的场景中,既有单通道的图片输入需求,也有多通道的图片输入需求,因此又整理回顾了一下单通道或者多通道卷积的差别,这里记录一下探索过程。 结论 直接给出结论,单通道图片和多通道图片在经历了第一…...
考研复试——计算机组成原理
文章目录计算机组成原理1. 计算机系统由哪两部分组成?计算机系统性能取决于什么?2. 冯诺依曼机的主要特点?3. 主存储器由什么组成,各部分有什么作用?4. 什么是存储单元、存储字、存储字长、存储体?5. 计算机…...
wps做网站/市场营销活动策划方案
本段代码实现了java Graphics库的最基本的功能,画一条直线。 import java.awt.Frame; import java.awt.Graphics; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.util.Scanner;class MyFrame extends Frame {int x1, y1, …...
网站建设类公/网络推广赚钱
谷歌地图位置偏移You’re meeting a friend downtown in a new city, and he asks you where you are. Be honest: you have no clue. Luckily, Google Maps can help you both out. 您在一个新城市的市区遇到一个朋友,他问您现在在哪里。 老实说:您没有…...
外国做爰网站/seo课程培训学校
Error: [WinError 10013] 以一种访问权限不允许的方式做了一个访问套接字的尝试。 该错误其实是Django的端口号被占用,解决步骤如下:1.找出占用的端口号:输入netstat -ano|findstr 8000 2.找出端口号对应的服务器:tasklist |find…...
做视频网站收入/推广引流吸引人的标题
g的编译选项介绍: -WI的理解,gcc的-WI,xxx选项似乎是在 gcc 中使用 ld 链接选项时候的编译器选项 -L: “链接” 的时候,去找的链接库的目录 - rpath(或 - R ,这似乎是一个内容),意思是“运行…...
wordpress腾讯后台账号/国内比较好的软文网站
点击上方蓝字 关注我们1、游戏简介游戏名称:萌宅物语无限爱心版游戏类型:养成游戏游戏平台:安卓整理时间:2020-05-30游戏评分:8.72、游戏介绍心得技巧分享特别说明游戏已修改为无限爱心版,在游戏中完成教程…...
与国外公司合作网站建设上海公司/seo课程在哪培训好
2019独角兽企业重金招聘Python工程师标准>>> 编辑/etc/mysql/my.cnf文件,相当于windows中的my.ini: 找到[client] 添加: default-character-set utf8 // 默认字符集为utf8 找到[mysqld] 添加: default-character-set utf8 //默认…...