第十四届蓝桥杯大赛软件赛省赛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…...
【Python】 -- 趣味代码 - 小恐龙游戏
文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...
大模型多显卡多服务器并行计算方法与实践指南
一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...
Unity UGUI Button事件流程
场景结构 测试代码 public class TestBtn : MonoBehaviour {void Start(){var btn GetComponent<Button>();btn.onClick.AddListener(OnClick);}private void OnClick(){Debug.Log("666");}}当添加事件时 // 实例化一个ButtonClickedEvent的事件 [Formerl…...
Bean 作用域有哪些?如何答出技术深度?
导语: Spring 面试绕不开 Bean 的作用域问题,这是面试官考察候选人对 Spring 框架理解深度的常见方式。本文将围绕“Spring 中的 Bean 作用域”展开,结合典型面试题及实战场景,帮你厘清重点,打破模板式回答,…...
若依登录用户名和密码加密
/*** 获取公钥:前端用来密码加密* return*/GetMapping("/getPublicKey")public RSAUtil.RSAKeyPair getPublicKey() {return RSAUtil.rsaKeyPair();}新建RSAUti.Java package com.ruoyi.common.utils;import org.apache.commons.codec.binary.Base64; im…...
图解JavaScript原型:原型链及其分析 | JavaScript图解
忽略该图的细节(如内存地址值没有用二进制) 以下是对该图进一步的理解和总结 1. JS 对象概念的辨析 对象是什么:保存在堆中一块区域,同时在栈中有一块区域保存其在堆中的地址(也就是我们通常说的该变量指向谁&…...
【实施指南】Android客户端HTTPS双向认证实施指南
🔐 一、所需准备材料 证书文件(6类核心文件) 类型 格式 作用 Android端要求 CA根证书 .crt/.pem 验证服务器/客户端证书合法性 需预置到Android信任库 服务器证书 .crt 服务器身份证明 客户端需持有以验证服务器 客户端证书 .crt 客户端身份…...
用 Rust 重写 Linux 内核模块实战:迈向安全内核的新篇章
用 Rust 重写 Linux 内核模块实战:迈向安全内核的新篇章 摘要: 操作系统内核的安全性、稳定性至关重要。传统 Linux 内核模块开发长期依赖于 C 语言,受限于 C 语言本身的内存安全和并发安全问题,开发复杂模块极易引入难以…...
游戏开发中常见的战斗数值英文缩写对照表
游戏开发中常见的战斗数值英文缩写对照表 基础属性(Basic Attributes) 缩写英文全称中文释义常见使用场景HPHit Points / Health Points生命值角色生存状态MPMana Points / Magic Points魔法值技能释放资源SPStamina Points体力值动作消耗资源APAction…...
CentOS 7.9安装Nginx1.24.0时报 checking for LuaJIT 2.x ... not found
Nginx1.24编译时,报LuaJIT2.x错误, configuring additional modules adding module in /www/server/nginx/src/ngx_devel_kit ngx_devel_kit was configured adding module in /www/server/nginx/src/lua_nginx_module checking for LuaJIT 2.x ... not…...
