【蓝桥杯】每日四道编程题(两道真题+两道模拟)| 第四天
专栏: 蓝桥杯——每日四道编程题(两道真题+两道模拟)
“蓝桥杯就要开始了,这些题刷到就是赚到”
₍ᐢ..ᐢ₎♡
另一个专栏: 蓝桥杯——每日四道填空题(两道真题+两道模拟题)
目录
专栏: 蓝桥杯——每日四道编程题(两道真题+两道模拟)
另一个专栏: 蓝桥杯——每日四道填空题(两道真题+两道模拟题)
第一道真题(2022年省赛):数位排序
第二道真题(2018年省赛):全球变暖
第三道模拟题(acwing): 不同路径数
第四道模拟题(2022年第三次模拟赛):清理水草
第一道真题(2022年省赛):数位排序
问题描述
小蓝对一个数的数位之和很感兴趣, 今天他要按照数位之和给数排序。当 两个数各个数位之和不同时, 将数位和较小的排在前面, 当数位之和相等时, 将数值小的排在前面。例如, 2022 排在 409 前面, 因为 2022 的数位之和是 6, 小于 409 的数位 之和 13 。
又如, 6 排在 2022 前面, 因为它们的数位之和相同, 而 6 小于 2022 。
给定正整数 n, m 请问对 1 到 n 采用这种方法排序时, 排在第 m 个的元 素是多少?
输入格式
输入第一行包含一个正整数 n 。第二行包含一个正整数 m 。
输出格式
输出一行包含一个整数, 表示答案。样例输入
13 5
样例输出
3
样例说明
1 到 13 的排序为: 1,10,2,11,3,12,4,13,5,6,7,8,91,10,2,11,3,12,4,13,5,6,7,8,9 。第 5 个数为 3 。
这题首先要建立其原数和其数位和的联系 ,并要根据数位和排序。
这题重点是sort函数的使用。
Sort(start,end,排序方法):
第三个参数是排序的方法,可以是从小到大【less<数据类型>( )】也可是从大到小【greater<数据类型>()】,还可以不写第三个参数,此时默认的排序方法是从小到大排序,而且这个排序方法可以自己找参照物写 。这里就可以选择数位和为参照物进行排序,具体操作看代码!
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 1e6 + 10;
int a[N] , b[N] , n , m ; //a[]储存原数 , b[]存储数位和
int sum(int num) //求数位和
{int h = 0;while(num){h += num % 10;num /= 10;}return h;
}
bool cmp(int x , int y) //x 和 y是比较的值。
{if(b[x] != b[y]) return b[x] < b[y]; //按数位小的排在前面return x < y; //按原数小的排在前面
}
int main()
{scanf("%d%d", &n , &m);for (int i = 1 ; i <= n ; ++i ){a[i] = i;b[i] = sum(i);}sort(a + 1 , a + n + 1 , cmp);printf("%d", a[m]);return 0;
}
这题也可以用结构体写,复习一下结构体吧:
#include <iostream>
#include <algorithm>
using namespace std;
struct sw
{int a; //原数int b; //数位和
}a[1000100];
bool cmp(sw x, sw y)
{if(x.b != y.b) return x.b < y.b;return x.a < y.a;
}
int main()
{int n, m;cin >> n >> m;for (int i = 1; i <= n; i ++){a[i].a = i;int t = a[i].a;a[i].b = 0;while (t){a[i].b += t % 10;t /= 10;}}sort(a + 1 , a + n + 1 , cmp);cout << a[m].a;return 0;
}
第二道真题(2018年省赛):全球变暖
题目描述
你有一张某海域 NxNNxN 像素的照片,"."表示海洋、"#"表示陆地,如下所示:.......
.##....
.##....
....##.
..####.
...###.
.......
其中"上下左右"四个方向上连在一起的一片陆地组成一座岛屿。例如上图就有 2 座岛屿。
由于全球变暖导致了海面上升,科学家预测未来几十年,岛屿边缘一个像素的范围会被海水淹没。具体来说如果一块陆地像素与海洋相邻(上下左右四个相邻像素中有海洋),它就会被淹没。
例如上图中的海域未来会变成如下样子:
.......
.......
.......
.......
....#..
.......
.......
请你计算:依照科学家的预测,照片中有多少岛屿会被完全淹没。
输入描述
第一行包含一个整数 N (1≤N≤1000)。以下 N 行 N 列代表一张海域照片。
照片保证第 1 行、第 1 列、第 N 行、第 N 列的像素都是海洋。、
输出一个整数表示答案。
输入样例
7 ....... .##.... .##.... ....##. ..####. ...###. .......
输出样例
1
运行限制
最大运行时间:1s
最大运行内存: 256M
算法:DFS
这题和之前我们刷的【蓝桥杯】每日四道填空题(两道真题+两道模拟题|第二天 中2022年第三次模拟赛的最大连通块这题简直不要太像,这些一个个的岛屿可以看出一个个不同的连通块,把题目的意思还原出来就是找岛屿中是否存在一个上下左右全是的陆地(关键岛)。存在则不会完全淹没,不存在则会被完全淹没。
#include <bits/stdc++.h>using namespace std;const int N=1010;int n,ans=0;
char g[N][N];
int dx[]={-1,0,1,0},dy[]={0,1,0,-1};
bool FLAG;//表示这座岛屿有没有被完全淹没,true表示被完全淹没,false表示没有被完全淹没void dfs(int x,int y)
{if(x<0||x>=n||y<0||y>=n||g[x][y]!='#')return ;g[x][y]='X'; //把找了的陆地,排除掉,千万别用'.'啊,不然会影响下面的判断的。bool flag=true;for(int i=0;i<4;i++){int nx=x+dx[i];int ny=y+dy[i];if(g[nx][ny]=='.')flag=false; dfs(nx,ny);}//只要出现一个上下左右全是‘#’的陆地(关键岛),就将FLAG=false;就可以判断这个岛屿是不会被完全淹没了。//但这里还不能退出递归,需要把这个连通的岛屿搜索完,即全变成’X‘。if(flag) FLAG=false;//FLAG=false,这座岛屿不会被完全淹没,如果最后递归完此岛屿,没有出现关键岛,那他一定会被淹没的。
}int main()
{cin>>n;for(int i=0;i<n;i++)cin>>g[i];for(int i=0;i<n;i++)for(int j=0;j<n;j++)if(g[i][j]=='#') {FLAG=true;//默认这座岛屿被完全淹没dfs(i,j);if(FLAG) ans++;} cout<<ans<<endl;return 0;
}
第三道模拟题(acwing): 不同路径数
我们好像做DFS的题,一般查找了的点不需要再查找了,因此我就去找了一道需要重复查找的题~
这题要对查找的(k+1)位的数去重,首先想到的就是哈希表实现的unordered_map。
#include <iostream>
#include <cstring>
#include <algorithm>
#include <unordered_map>
using namespace std;const int N = 10;int n , m , k;
char g[N][N];
int dx[4] = {-1, 0, 1, 0}, dy[4] = {0, 1, 0, -1};
unordered_map<string, int> h;void dfs(int a, int b, int u,string path)
{if(u == k){h[path] = 1;return;}for(int i = 0; i < 4; i++){int x = a + dx[i], y = b + dy[i];if(x >= 0 && x < n && y >= 0 && y < m){dfs(x, y, u + 1, path + g[x][y]);}}
}int main()
{cin >> n >> m >> k;k++;string path;for(int i = 0; i < n; i++){for(int j = 0; j < m; j++)cin >> g[i][j];}for(int i = 0; i < n; i++){for(int j = 0; j < m; j++)dfs(i, j, 0, path);}cout << h.size(); //直接统计有多少个不同的键值对就行了return 0;
}
第四道模拟题(2022年第三次模拟赛):清理水草
问题描述
小蓝有一个 n * m 大小的矩形水域,小蓝将这个水域划分为 n 行 m 列,行数从 1 到 n 标号,列数从 1 到 m 标号。每行和每列的宽度都是单位 1 。
现在,这个水域长满了水草,小蓝要清理水草。
每次,小蓝可以清理一块矩形的区域,从第 r1 行(含)到第 r2 行(含)的第 c1 列(含)到 c2 列(含)。
经过一段时间清理后,请问还有多少地方没有被清理过。输入格式
输入第一行包含两个整数 n, m,用一个空格分隔。
第二行包含一个整数 t ,表示清理的次数。
接下来 t 行,每行四个整数 r1, c1, r2, c2,相邻整数之间用一个空格分隔,表示一次清理。请注意输入的顺序。输出格式
输出一行包含一个整数,表示没有被清理过的面积。
样例输入1
2 3
2
1 1 1 3
1 2 2 2样例输出1
2
样例输入2
30 20
2
5 5 10 15
6 7 15 9样例输出2
519
评测用例规模与约定
对于所有评测用例,1 <= r1 <= r2 <= n <= 100, 1 <= c1 <= c2 <= m <= 100, 0 <= t <= 100。
这题看着其实很简单,但关键是如何优化算法,减少时耗。
这题看到子矩阵 ,我们应该马上想到二维前缀和二维差分来优化。
不熟悉一、二维前缀和一二维差分的友友,看我总结的这篇文章(点这),非常详细哦!
#include <iostream>
using namespace std;
int n, m;
int g[105][105]; //没被清理的地方都设成 0 。
void insert(int x1, int y1, int x2, int y2) { g[x1][y1] += 1;g[x2 + 1][y1] -= 1;g[x1][y2 + 1] -= 1;g[x2 + 1][y2 + 1] += 1;
}
int main() {int t;cin >> n >> m >> t;int x1, x2, y1, y2;for(int i = 0; i < t; i ++) {scanf("%d%d%d%d", &x1, &y1, &x2, &y2);insert(x1, y1, x2, y2); //全是0的二维数组,它本身也是自己的二维差分数组。 }for(int i = 1; i <= n; i ++)for(int j = 1; j <= m; j ++)g[i][j] += g[i - 1][j] + g[i][j - 1] - g[i - 1][j - 1]; //清理掉的地方前缀和是1,没有清理的地方,前缀和是0 int res = 0;for(int i = 1; i <= n; i ++)for(int j = 1; j <= m; j ++)if(!g[i][j]) res ++;cout << res << endl;return 0;
}
相关文章:

【蓝桥杯】每日四道编程题(两道真题+两道模拟)| 第四天
专栏: 蓝桥杯——每日四道编程题(两道真题两道模拟) “蓝桥杯就要开始了,这些题刷到就是赚到” ₍ᐢ..ᐢ₎♡ 另一个专栏: 蓝桥杯——每日四道填空题(两道真题两道模拟题) 目录 专栏࿱…...
大家有没有时候觉得,递归,分治,回溯,傻傻分不清楚?
递归,分治,回溯的定义 递归(Recursion) 递归是一种解决问题的方法,它将一个问题分解成一个或多个较小的相同类型的子问题,然后通过递归调用自身来解决这些子问题。递归通常包括一个基本情况(b…...

Java 8 - Lambda 表达式
1. 函数式接口 当一个接口中只有一个非 default 修饰的方法,这个接口就是一个函数式接口用 FunctionalInterface 标注 1)只有一个抽象方法 FunctionalInterface public interface MyInterface {void print(int x); } 2)只有一个抽象方法和…...
【Ruby学习笔记】4.Ruby 类和对象及类案例
前言 本章介绍Ruby的类和对象及类案例。 Ruby 类和对象 Ruby 是一种完美的面向对象编程语言。面向对象编程语言的特性包括: 数据封装数据抽象多态性继承 这些特性将在 面向对象的 Ruby 中进行讨论。 一个面向对象的程序,涉及到的类和对象。类是个别…...

分享一个计算表格内单元格合并的工具,支持行合并、列合并等常见场景
分享一个计算表格内单元格合并的工具,支持行合并、列合并等常见场景 效果图 安装 cj-toolkit-x/table-cell-merger 插件 npm i cj-toolkit-x/table-cell-merger使用方法 import {TableCellMerger} from "cj-toolkit-x/table-cell-merger" // 创建一个单…...

CUDA编程(三):Hello world
CUDA编程(三):Hello worldCUDA编程Hello worldCUDA编程 CUDA是Compute Unified Device Architecture的缩写,由英伟达公司2007年开始推出,初衷是为GPU增加一个易用的编程接口,让开发者无需学习复杂的着色语…...

二十九、String的不可变性
一、String的基本特性 1.String:字符串,使用一对“”引起来表示 1)String s1 “hallo”; //字面量的定义方式 2)String 说 new String(“hello”)’ 2.String声明为final的,不可被继承。 3.String实现了Serialzable接口:表示字符串是支持序列化的。实…...
TCP服务器如何使用select处理多客户连接
TCP是一种面向连接的通信方式,一个TCP服务器难免会遇到同时处理多个用户的连接请求的问题,本文用一个简化的实例说明如何在一个TCP服务器程序中,使用select处理同时出现的多个客户连接,文章给出了程序源代码,本文假定读者已经具备了基本的socket编程知识,熟悉基本的服务器…...

python字符编码
目录 ❤ 前言 文本编辑器存取文件的原理(nodepad,pycharm,word) python解释器执行py文件的原理 ,例如python test.py 总结 ❤ 什么是字符编码? ASCII MBCS Unicode ❤ 字符编码的发展史 阶段一: 现代计算…...
面向对象练习题(8)
目录 第一题 第二题 第三题 第一题 思路分析: 1.Person p new Student();这就是一个向上转型,让父类的引用指向子类的对象,但是向上转型不能访问子类的属性和方法 我们在写代码时看的是编译类型 在运行是看的是运行类型 p.run(); p.eat(); …...
重构类关系-Extract Interface提炼接口八
重构类关系-Extract Interface提炼接口八 1.提炼接口 1.1.使用场景 若干客户使用类接口中的同一子集,或者两个类的接口有部分相同。将相同的子集提炼到一个独立接口中。 类之间彼此互用的方式有若干种。“使用一个类”通常意味用到该类的所有责任区。另一种情况…...
vivo手机各系列简介和拆解
Vivo是中国智能手机制造商,其产品线较多,主要包括以下系列: X系列:X系列是Vivo的高端智能手机系列,注重出色的拍照性能、高质量的音效和高端的设计。该系列主要面向追求高质量拍照和高端体验的用户。 V系列࿱…...

Redis:redis通用命令;redis常见数据结构;redis客户端;redis的序列化
一、redis命令 1.redis通用命令 Redis 通用命令是一些 Redis 下可以作用在常用数据结构上的常用命令和一些基础的命令 常见的命令有: keys 查看符合模板的所有key,不建议在生产环境设备上使用,因为keys会模式匹配所有符合条件的key&#…...
Java新特性
switch Java中switch的三种用法方式 JAVA中的switch Java switch 中如何使用枚举? 注解 天天用注解你真的知道怎么用吗?Java中的注解及其实现原理。 JAVA注解 JAVA注解 基础 集合判空 求和 Java8之List求和 JAVA中对list使用stream对某个字段求和…...
Java_Spring:8. Spring 中 AOP 的细节
目录 1 说明 2 AOP 相关术语 3 学习 spring 中的 AOP 要明确的事 4 关于代理的选择 1 说明 spring 的 aop通过配置的方式,实现上一章节的功能。 2 AOP 相关术语 Joinpoint(连接点): 所谓连接点是指那些被拦截到的点。在 spring 中,这些点指的是方法,因为 spring …...

uni-app--》uni-app的生命周期讲解
🏍️作者简介:大家好,我是亦世凡华、渴望知识储备自己的一名在校大学生 🛵个人主页:亦世凡华、 🛺系列专栏:uni-app 🚲座右铭:人生亦可燃烧,亦可腐败…...

fastp软件介绍
fastp软件介绍1、软件介绍2、重要参数解析2.1 全部参数2.2 使用示例2.3 重要参数详解(1)UMI去除(2)质量过滤(3)长度过滤(4)低复杂度过滤(5)adapter过滤&#…...

C++继承相关总结
文章目录前言1.继承的相关概念1.继承概念2.继承的相关语法3.基类和派生类对象赋值转换(赋值兼容规则)2.继承中的注意事项1.继承中的作用域2.派生类的默认成员函数1.构造函数与拷贝构造2.赋值重载与析构3.友元关系与静态成员变量3.多继承(菱形继承)1.虚拟继承2.虚拟继…...
【从零开始学习 UVM】8.2、Reporting Infrastructure —— uvm_printer 详解
文章目录 老派风格在UVM中如何完成uvm 风格Table printerTree printerLine printerprint使用print使用条件使用konb更改print配置示例在一个随机验证环境中,数据对象不断地由不同的组件生成和操作,如果能够显示对象的内容,则调试会变得更加容易。 老派风格 传统上,这是通…...
Mybatis、TKMybatis对比
文章目录1.Mybatis(1)配置文件(2)实体类(3)Mapper(4)mybatis-config.xml2.TKMybatis(1)配置文件(2)实体类(3)M…...
挑战杯推荐项目
“人工智能”创意赛 - 智能艺术创作助手:借助大模型技术,开发能根据用户输入的主题、风格等要求,生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用,帮助艺术家和创意爱好者激发创意、提高创作效率。 - 个性化梦境…...
反向工程与模型迁移:打造未来商品详情API的可持续创新体系
在电商行业蓬勃发展的当下,商品详情API作为连接电商平台与开发者、商家及用户的关键纽带,其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息(如名称、价格、库存等)的获取与展示,已难以满足市场对个性化、智能…...
多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验
一、多模态商品数据接口的技术架构 (一)多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如,当用户上传一张“蓝色连衣裙”的图片时,接口可自动提取图像中的颜色(RGB值&…...
MySQL中【正则表达式】用法
MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现(两者等价),用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例: 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)
文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...

IT供电系统绝缘监测及故障定位解决方案
随着新能源的快速发展,光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域,IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选,但在长期运行中,例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...
C++八股 —— 单例模式
文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全(Thread Safety) 线程安全是指在多线程环境下,某个函数、类或代码片段能够被多个线程同时调用时,仍能保证数据的一致性和逻辑的正确性…...

如何在最短时间内提升打ctf(web)的水平?
刚刚刷完2遍 bugku 的 web 题,前来答题。 每个人对刷题理解是不同,有的人是看了writeup就等于刷了,有的人是收藏了writeup就等于刷了,有的人是跟着writeup做了一遍就等于刷了,还有的人是独立思考做了一遍就等于刷了。…...
在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?
uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件,用于在原生应用中加载 HTML 页面: 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...
Fabric V2.5 通用溯源系统——增加图片上传与下载功能
fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...