第十四届蓝桥杯大赛软件赛省赛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…...
React 第五十五节 Router 中 useAsyncError的使用详解
前言 useAsyncError 是 React Router v6.4 引入的一个钩子,用于处理异步操作(如数据加载)中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误:捕获在 loader 或 action 中发生的异步错误替…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序
一、开发准备 环境搭建: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 项目创建: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...
工程地质软件市场:发展现状、趋势与策略建议
一、引言 在工程建设领域,准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具,正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...
MVC 数据库
MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...
C++ 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
Mobile ALOHA全身模仿学习
一、题目 Mobile ALOHA:通过低成本全身远程操作学习双手移动操作 传统模仿学习(Imitation Learning)缺点:聚焦与桌面操作,缺乏通用任务所需的移动性和灵活性 本论文优点:(1)在ALOHA…...
10-Oracle 23 ai Vector Search 概述和参数
一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI,使用客户端或是内部自己搭建集成大模型的终端,加速与大型语言模型(LLM)的结合,同时使用检索增强生成(Retrieval Augmented Generation &#…...
08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险
C#入门系列【类的基本概念】:开启编程世界的奇妙冒险 嘿,各位编程小白探险家!欢迎来到 C# 的奇幻大陆!今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类!别害怕,跟着我,保准让你轻松搞…...
FFmpeg:Windows系统小白安装及其使用
一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】,注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录(即exe所在文件夹)加入系统变量…...
Web后端基础(基础知识)
BS架构:Browser/Server,浏览器/服务器架构模式。客户端只需要浏览器,应用程序的逻辑和数据都存储在服务端。 优点:维护方便缺点:体验一般 CS架构:Client/Server,客户端/服务器架构模式。需要单独…...
