第十四届蓝桥杯大赛软件赛省赛C/C++ 大学 B 组(补题)
文章目录
- 1 日期统计
- 2 01串的熵
- 3 冶炼金属
- 4 飞机降落
- 5 接龙数列
- 6 岛屿个数
- 7 子串简写
- 8 整数删除
- 9 景区导游
- 10 砍树
前言:时隔一年,再次做这套题(去年参赛选手),差点道心不稳T_T,故作此补题!
1 日期统计
- 没写出来,看题解知道了一种暴力的思想,枚举所有2023年的日期,看看有没有满足条件的数。
- 关于如何提取题中的数字?可以复制到excel当中,然后ctrl+H,将空格替换为英文逗号!
#include<bits/stdc++.h>
using namespace std;#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)
#define endl "\n"
#define int long long
typedef pair<int,int> PII;
const int N = 2e5+10, INF = 0x3f3f3f3f;
int a[N]={0,5,6,8,6,9,1,6,1,2,4,9,1,9,8,2,3,6,4,7,7,5,9,5,0,3,8,7,5,8,1,5,8,6,1,8,3,0,3,7,9,2,7,0,5,8,8,5,7,0,9,9,1,9,4,4,6,8,6,3,3,8,5,1,6,3,4,6,7,0,7,8,2,7,6,8,9,5,6,5,6,1,4,0,1,0,0,9,4,8,0,9,1,2,8,5,0,2,5,3,3};
int mon[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int n=100,ans;void solve() {for(int m=1;m<=12;m++) //枚举所有日期for(int d=1;d<=mon[m];d++){int tar[9]={0,2,0,2,3,m/10,m%10,d/10,d%10}; //当前日期int num=1;for(int i=1;i<=100;i++){ //看看有没有符合条件的if(a[i]==tar[num]){num++;if(num==9){ans++; break;}}}}cout<<ans;
}signed main() {
// IOS;int T=1;
// cin>>T;while(T--) {solve();}return 0;
}
2 01串的熵
- 因为0的出现次数比1的出现次数少,所以我们可以枚举0的个数,1的个数即为01串的长度减去0的个数。
- 然后根据公式即可求得
#include<bits/stdc++.h>
using namespace std;#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)
#define endl "\n"
#define int long long
const int N = 2e5+10, INF = 0x3f3f3f3f;
int len=23333333,cnt;
double res,tar=11625907.5798; void solve() {for(int i=0;i<=len;i++){ //0的数量 int j=len-i; //1的数量 res=-1.0*(1.0*i/len)*i*(log(1.0*i/len)/log(2))+(-1)*(1.0*j/len)*j*(log(1.0*j/len)/log(2));if(res>=tar){printf("%.4f %.4f\n",res,tar);cout<<i<<endl; break;}}}signed main() {
// IOS;int T=1;
// cin>>T;while(T--) {solve();}return 0;
}
3 冶炼金属
- 读完题目后,我们可以枚举答案来求得V的最大值和最小值,即用到二分答案。
#include<bits/stdc++.h>
using namespace std;#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)
#define endl "\n"
#define int long long
const int N = 1e4+10, INF = 0x3f3f3f3f;
int n,a[N],b[N];
int res1,res2;bool check1(int x){for(int i=1;i<=n;i++){int num=a[i]/x; //转换的个数if(num>b[i]) return false;}return true;
}int calc1(){int l=0,r=1e9+10;while(l+1<r){int mid=l+r>>1;if(check1(mid)) r=mid; //满足条件,缩小范围求最小值else l=mid;}return r;
}bool check2(int x){for(int i=1;i<=n;i++){int num=a[i]/x;if(num<b[i]) return false;}return true;
}int calc2(){int l=0,r=1e9+10;while(l+1<r){int mid=l+r>>1;if(check2(mid)) l=mid;else r=mid;}return l;
}void solve() {cin>>n;for(int i=1;i<=n;i++)cin>>a[i]>>b[i];res1=calc1(); //最小值res2=calc2(); //最大值cout<<res1<<' '<<res2;
}signed main() {
// IOS;int T=1;
// cin>>T;while(T--) {solve();}return 0;
}
4 飞机降落
- N的数据范围只有10,我们可以暴力枚举所有飞机降落的顺序,如果有一个满足就符合要求。
- 用全排列函数next_permutation函数可以实现这一操作
#include<bits/stdc++.h>
using namespace std;#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)
#define endl "\n"
#define int long long
const int N = 1e3+10, INF = 0x3f3f3f3f;
struct node{int t,d,l;
}a[N];
int n,id[N]; void solve() {cin>>n;for(int i=1;i<=n;i++){int t,d,l; cin>>t>>d>>l;a[i]={t,d,l}; id[i]=i;}do{int now=0,flag=1;for(int i=1;i<=n;i++){int t=a[id[i]].t,d=a[id[i]].d,l=a[id[i]].l;if(t+d<now){ //不符合flag=0;break;} else{if(t>now) now=t+l;else now+=l;}}if(flag){cout<<"YES"<<endl;return;}}while(next_permutation(id+1,id+1+n)); cout<<"NO"<<endl;
}signed main() {
// IOS;int T=1;cin>>T;while(T--) {solve();}return 0;
}
5 接龙数列
- 可以将问题转化为求最长的符合要求的接龙序列,然后用总个数减去最长的接龙序列的长度。
- 这就需要dp来解决了
#include<bits/stdc++.h>
using namespace std;#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)
#define endl "\n"
#define int long long
const int N = 1e5+10, INF = 0x3f3f3f3f;
int n,num=0;
int x,dp[N];
//dp[i]表示以i为结尾的最长接龙序列的长度 void solve(){cin>>n;string s;for(int i=0;i<n;i++){cin>>s;int x=s[0]-'0',y=s[s.size()-1]-'0'; //取出第一位和最后一位 dp[y]=max(dp[y],dp[x]+1);num=max(num,dp[y]);}cout<<n-num;
}signed main() {
// IOS;int T=1;
// cin>>T;while(T--) {solve();}return 0;
}
6 岛屿个数
- 连通块,图的遍历问题
- 可以将所有的连通块染色,每一种颜色代表一个连通块。
- 然后检查所有的岛屿是不是子岛屿,即该岛屿是否在“环”的内部,如何判断是否在环的内部呢?
- 如果该岛屿内的任意一个点可以走到边界或边界之外,说明该岛屿不在环内,可以把其它的岛屿看作障碍物;如果在环内,则不可能到达边界点!
- 判断是否为子岛屿时,需要沿着8个方向走!
#include<bits/stdc++.h>
using namespace std;#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)
#define endl "\n"
#define int long long
#define fi first
#define se second
typedef pair<int,int> PII;
const int N = 1e3+10, INF = 0x3f3f3f3f;
char g[N][N];
int m,n,cnt,ans;
int c[N][N];
int dx[]={0,1,0,-1,-1,1,1,-1};
int dy[]={1,0,-1,0,1,1,-1,-1};
set<int> s;void bfs(int sx,int sy){cnt++; //该连通块染色为cntqueue<PII> q;q.push({sx,sy});while(q.size()){auto t=q.front(); q.pop();c[t.fi][t.se]=cnt;for(int i=0;i<4;i++){int tx=t.fi+dx[i];int ty=t.se+dy[i];if(tx<=0||tx>m||ty<=0||ty>n) continue;if(c[tx][ty]||g[tx][ty]=='0') continue;q.push({tx,ty});}}
}bool vis[N][N],flag;
//判断是否在环内
bool check(int x,int y,int col){if(flag) return true;for(int i=0;i<8;i++){int tx=x+dx[i];int ty=y+dy[i];if(c[tx][ty]!=col&&c[tx][ty]) continue;
// if(col==3) cout<<tx<<' '<<ty<<' '<<flag<<endl;if(tx<=1||ty<=1||tx>=m||ty>=n){ //到达边界,不在环内flag=1;return true;}if(vis[tx][ty]) continue; //已访问过vis[tx][ty]=1;if(check(tx,ty,col)) return true;}return false; //在环内
}void solve() {cin>>m>>n;for(int i=1;i<=m;i++)for(int j=1;j<=n;j++)cin>>g[i][j];cnt=0; ans=0; s.clear(); //多组样例!注意清空!memset(c,0,sizeof(c));for(int i=1;i<=m;i++)for(int j=1;j<=n;j++){if(!c[i][j]&&g[i][j]=='1'){bfs(i,j);}}
// cout<<endl;
// for(int i=1;i<=m;i++){
// for(int j=1;j<=n;j++)
// cout<<c[i][j];
// cout<<endl;
// }set<int> s; //set去重for(int i=1;i<=m;i++)for(int j=1;j<=n;j++){
// cout<<i<<' '<<j<<' '<<c[i][j]<<endl;if(g[i][j]=='1'&&!s.count(c[i][j])&&check(i,j,c[i][j])){s.insert(c[i][j]);}memset(vis,0,sizeof(vis)); flag=0;}cout<<s.size()<<endl;
}signed main() {
// IOS;int T=1;cin>>T;while(T--) {solve();}return 0;
}
7 子串简写
- 我们可以记录两个字符a,b的所有位置,然后枚举第一个字符a,二分找到第一个符合要求的字符b的位置,之后所有的字符b都是符合要求的,累加所有答案即可
- 复杂度为O(n log(n))
#include<bits/stdc++.h>
using namespace std;#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)
#define endl "\n"
#define int long long
#define lb lower_bound
typedef pair<int,int> PII;
const int N = 2e5+10, INF = 0x3f3f3f3f;
int k,ans;
string s;
set<int> s1;
vector<int> a;
char c1,c2;void solve() {
// freopen("in.txt","r",stdin); cin>>k>>s>>c1>>c2;for(int i=0;i<s.size();i++){if(s[i]==c1) s1.insert(i); //保存所有位置if(s[i]==c2) a.push_back(i);}for(auto i:s1){int cnt=lb(a.begin(),a.end(),i+k-1)-a.begin(); //二分查找ans+=a.size()-cnt;}
// freopen("out.txt","w",stdout); cout<<ans;
}signed main() {
// IOS;int T=1;
// cin>>T;while(T--) {solve();}return 0;
}
8 整数删除
- 优先队列+链表
- 每次取出数列中的最小值,可以用优先队列实现。
- 删除和相邻两数加上被删除的值这两个操作用链表来实现。
- 代码见蓝桥发题解的大佬
9 景区导游
- 不会T_T
- 用LCA来求解
10 砍树
- 树上差分模板题
相关文章:
第十四届蓝桥杯大赛软件赛省赛C/C++ 大学 B 组(补题)
文章目录 1 日期统计2 01串的熵3 冶炼金属4 飞机降落5 接龙数列6 岛屿个数7 子串简写8 整数删除9 景区导游10 砍树 前言:时隔一年,再次做这套题(去年参赛选手),差点道心不稳T_T,故作此补题! 1 日期统计 没写出来&…...
蓝桥杯刷题--python-32
4964. 子矩阵 - AcWing题库 from collections import deque n, m, a, b map(int, input().split()) mod 998244353 nums [] for _ in range(n): nums.append(list(map(int, input().split()))) rmin [[0 for i in range(m)] for i in range(n)] rmax [[0 for i in ran…...
单例模式如何保证实例的唯一性
前言 什么是单例模式 指一个类只有一个实例,且该类能自行创建这个实例的一种创建型设计模式。使用目的:确保在整个系统中只能出现类的一个实例,即一个类只有一个对象。对于频繁使用的对象,“忽略”创建时的开销。特点:…...
IntelliJ IDE 插件开发 | (七)PSI 入门及实战(实现 MyBatis 插件的跳转功能)
系列文章 IntelliJ IDE 插件开发 |(一)快速入门IntelliJ IDE 插件开发 |(二)UI 界面与数据持久化IntelliJ IDE 插件开发 |(三)消息通知与事件监听IntelliJ IDE 插件开发 |(四)来查收…...
【教程】iOS如何抓取HTTP和HTTPS数据包经验分享
📱 在日常的App开发和研发调研中,对各类App进行深入的研究分析时,我们需要借助专业的抓包应用来协助工作。本文将介绍如何使用iOS手机抓包工具来获取HTTP和HTTPS数据包,并推荐一款实用的抓包应用——克魔助手,希望能够…...
基于javaweb(springboot)汽车配件管理系统设计和实现以及文档报告
基于javaweb(springboot)汽车配件管理系统设计和实现以及文档报告 博主介绍:多年java开发经验,专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》 欢迎点赞 收藏 ⭐…...
Spring Cloud Gateway Server MVC
之前你如果要用spring cloud gateway ,就必须是webflux 的,也就是必须是异步响应式编程。不能和spring mvc 一起使用。现在spring cloud 新出了一个可以不用webflux的gateway。 具体使用mvc的gateway步骤如下 普通的Eureka Client的项目 如果你只是想测…...
建立动态MGRE隧道的配置方法
目录 一、实验拓扑 1.1通用配置 1.1.1地址配置 1.1.2静态缺省指向R5,实现公网互通 1.1.3MGRE协议配置 1.1.4配置静态 二、Shortcut方式 三、Normal方式(非shortcut) 四、总结 一、实验拓扑 下面两种配置方法皆使用静态方式 1.1通用配…...
【MySQL】9. 内置函数
函数 1. 日期函数 获得年月日: mysql> select current_date(); ---------------- | current_date() | ---------------- | 2024-03-23 | ---------------- 1 row in set (0.00 sec)获得时分秒: mysql> select current_time(); ------------…...
芯片工程系列(5)2.5D 3D封装
0 英语缩写 硅通孔(Through Silicon Via,TSV)硅中介层(Silicon Interposer)物理气象沉淀法(Physical Vapor Deposition,PVD)DRIE、CVD、PVD、CMP等设备CoWoS(Chip on Wa…...
KubeSphere简单介绍及安装使用
KubeSphere 概述 官网地址:https://kubesphere.io/zh/ 什么是 kubesphere KubeSphere 是一个开源的多云容器管理平台,旨在简化企业级 k8s 集群的部署、管理和运维。它提供了一个可视化的管理界面,帮助用户更轻松地管理和监控 k8s 集群&…...
Java零基础-集合:Java 8新增的集合操作
哈喽,各位小伙伴们,你们好呀,我是喵手。 今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。 我是一名后…...
C++经典面试题目(七)
1、什么是引用?请解释引用的概念和用法。 当谈论引用时,指的是在 C 中的一种类型。引用提供了对变量的别名,它允许通过不同的名称访问同一个变量。引用在 C 中常用于函数参数传递、返回值传递和操作符重载等场景。 引用的概念和用法&#x…...
让手机平板成为AI开发利器:AidLux
想ssh登录自己的手机吗? 想在手机上自由的安装lynx、python、vscode、jupyter甚至飞桨PaddlePaddle、Tensorflow、Pytorch和昇思Mindspore吗? 那么看这里....装上AidLux,以上全都有! AidLux是一个综合的AI开发平台,…...
Python物理学有限差分微分求解器和动画波形传播
🎯要点 Python数值和符号计算: 振动常微分方程:🎯中心差分求解器,绘制移动窗口研究长时间序列。🎯符号计算离散方程量化误差。🎯Python数值对比正向欧拉方法,反向欧拉方法…...
游戏本续航@控制中心的省电模式效果如何
文章目录 节能模式长续航模式👺相关工具 节能模式长续航模式👺 蓝天模具Control Center中的模式 根据我的试验,以及软件的提示,可以发现 Power Saving是最省电的,儿Quiet模式并不省电,它会启用独立显卡,只不过风扇的转速不像娱乐模式和性能模式那么积极而…...
centOS 安装MySQL8.0
1.配置yum仓库 rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022 2.安装MySQL8.x版本 yum库 rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el7-2.noarch.rpm 或者 wget https://dev.mysql.com/get/mysql80-community-release-el7-2.noarch…...
力扣 1.两数之和
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。 你可以按任意顺序返回…...
Occupancy field----其他应用
文章目录 3D表示技术的概述:Signed Distance Function (SDF)Occupancy Field (占用场)神经辐射场(NeRF) Occupancy Networks 是一种基于Occupancy表示的可微分模型,它在与其他3D表示技术(例如点云、体素和三角面片&…...
Spring_MVC
web.xml配置文件 <?xml version"1.0" encoding"UTF-8"?> <web-app xmlns"http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://xmlns.jcp.org/xml…...
后进先出(LIFO)详解
LIFO 是 Last In, First Out 的缩写,中文译为后进先出。这是一种数据结构的工作原则,类似于一摞盘子或一叠书本: 最后放进去的元素最先出来 -想象往筒状容器里放盘子: (1)你放进的最后一个盘子(…...
边缘计算医疗风险自查APP开发方案
核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...
c++ 面试题(1)-----深度优先搜索(DFS)实现
操作系统:ubuntu22.04 IDE:Visual Studio Code 编程语言:C11 题目描述 地上有一个 m 行 n 列的方格,从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子,但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...
现代密码学 | 椭圆曲线密码学—附py代码
Elliptic Curve Cryptography 椭圆曲线密码学(ECC)是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础,例如椭圆曲线数字签…...
【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验
系列回顾: 在上一篇中,我们成功地为应用集成了数据库,并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了!但是,如果你仔细审视那些 API,会发现它们还很“粗糙”:有…...
土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等
🔍 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术,可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势,还能有效评价重大生态工程…...
c#开发AI模型对话
AI模型 前面已经介绍了一般AI模型本地部署,直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型,但是目前国内可能使用不多,至少实践例子很少看见。开发训练模型就不介绍了&am…...
IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)
文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...
UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)
UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中,UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化…...
