【蓝桥杯】每日四道编程题(两道真题+两道模拟)| 第四天
专栏: 蓝桥杯——每日四道编程题(两道真题+两道模拟)
“蓝桥杯就要开始了,这些题刷到就是赚到”
₍ᐢ..ᐢ₎♡
另一个专栏: 蓝桥杯——每日四道填空题(两道真题+两道模拟题)
目录
专栏: 蓝桥杯——每日四道编程题(两道真题+两道模拟)
另一个专栏: 蓝桥杯——每日四道填空题(两道真题+两道模拟题)
第一道真题(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…...

网络六边形受到攻击
大家读完觉得有帮助记得关注和点赞!!! 抽象 现代智能交通系统 (ITS) 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 (…...

抖音增长新引擎:品融电商,一站式全案代运营领跑者
抖音增长新引擎:品融电商,一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中,品牌如何破浪前行?自建团队成本高、效果难控;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...

【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例
文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍
文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结: 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析: 实际业务去理解体会统一注…...
土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等
🔍 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术,可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势,还能有效评价重大生态工程…...
关于 WASM:1. WASM 基础原理
一、WASM 简介 1.1 WebAssembly 是什么? WebAssembly(WASM) 是一种能在现代浏览器中高效运行的二进制指令格式,它不是传统的编程语言,而是一种 低级字节码格式,可由高级语言(如 C、C、Rust&am…...

k8s业务程序联调工具-KtConnect
概述 原理 工具作用是建立了一个从本地到集群的单向VPN,根据VPN原理,打通两个内网必然需要借助一个公共中继节点,ktconnect工具巧妙的利用k8s原生的portforward能力,简化了建立连接的过程,apiserver间接起到了中继节…...

Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
Go 语言并发编程基础:无缓冲与有缓冲通道
在上一章节中,我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道,它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好࿰…...

Kafka入门-生产者
生产者 生产者发送流程: 延迟时间为0ms时,也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于:异步发送不需要等待结果,同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...