第十四届蓝桥杯大赛软件赛国赛C/C++研究生组
研究生C++国赛软件大赛
- 题一:混乘数字
- 题二:钉板上的正方形
- 题三:整数变换
- 题四:躲炮弹
- 题五:最大区间
题一:混乘数字

有一点像哈希表:
首先定义两个数组,拆分ab和n
然后令n = a*b 查看两个表对应的十进制位数和个数是否相同
还需要定义一个set,用于验证当前的n是否已经被计算过了
是因为2 * 8== 4 * 4 == 16
#include<bits/stdc++.h>
using namespace std;
set<int> s;//
int StoredAB[10],StoredN[10];//0-9一共10个珠子
int ans;
//验证
bool test(int n,int a,int b){//初始化两个数组memset(StoredAB,0,sizeof(StoredAB));memset(StoredN,0,sizeof(StoredN));while(n){StoredN[n%10]++;n/=10;}while(a) StoredAB[a%10]++,a/=10;while(b) StoredAB[b%10]++,b/=10;for(int i=0;i<=9;i++){if(StoredAB[i]!=StoredN[i]) return false;}return true;
}
int main()
{for(int a=1;a<1000000;a++){for(int b = 1;b<1000000;b++){int n = a*b;if(n>1000000) break;if(test(n,a,b)){if(s.find(n)==s.end()){ //没有set集合当中的话ans++;s.insert(n);}}}}cout<<ans<<endl;return 0;
}
题二:钉板上的正方形


下面给出的代码在表示其他正方形定点时用到了三角形的旋转
下面给出代码:
#include <bits/stdc++.h>
using namespace std;
using ll = long long;int a[10][10] =
{{1,1,0,1,0,1,1,1,1,1},{1,1,1,0,0,1,1,1,1,0},{1,1,0,0,1,0,1,1,1,1},{1,0,1,1,0,1,1,1,1,0},{1,0,1,0,1,1,1,1,0,0},{1,0,0,1,0,1,0,1,0,1},{1,1,1,1,1,1,1,1,1,0},{0,1,1,1,1,1,1,1,1,0},{0,1,1,0,1,0,1,1,1,1},{1,0,1,0,0,1,0,1,0,0}
};struct edge {int x, y;bool operator <(const edge &e) const {return x * x + y * y < e.x * e.x + e.y * e.y;}
};int main() {set<edge> st;auto test = [&](int i, int j) {if(i < 0 || i >= 10 || j < 0 || j >= 10) return false;return a[i][j] == 1;};for(int i = 0;i < 10;i++) {for(int j = 0;j < 10;j++) {if(a[i][j] != 1) continue;for(int x = i;x < 10;x++) {for(int y = j;y < 10;y++) {if(x == i && y == j) continue;if(a[x][y] != 1) continue;int dx = x - i, dy = y - j;if(test(i + dy, j - dx) && test(i + dx + dy, j + dy - dx)) {st.insert(edge{dx, dy});}}}}}cout << st.size() << endl;
}
题三:整数变换

这道题比较简单 直接给代码嗷:
#include <iostream>
using namespace std;
int main()
{// 请在此输入您的代码int n;cin>>n;int mintues = 0;while(n>0){int temp = n;int sum=0;while(temp>0){sum+=temp%10;temp/=10;}n-=sum;mintues++;}cout<<mintues;return 0;
}
题四:躲炮弹

本题有一个点就是他给的距离n是基于数轴上的原点的距离,题意没有说的很清楚
其他的就是需要向左向右寻找能够躲避炮弹的点
#include <iostream>
#include <algorithm>
using namespace std;// 判断m是否安全:不被任何x∈[L, R]整除
bool is_safe(int m, int L, int R) {if (m < L) return true; // m小于L时安全if (L <= m && m <= R) return false; // m在区间内则不安全for (int d = 1; d * d <= m; ++d) {if (m % d != 0) continue;int a = d;int b = m / d;// 检查因数对是否在区间内,因数都在区间内,则一定不安全if ((a >= L && a <= R) || (b >= L && b <= R)) {return false;}}return true;
}int main() {int n, L, R;cin >> n >> L >> R;// 检查原始位置是否安全bool original_safe = true;if (L <= n && n <= R) { // 在区间内,一定不安全original_safe = false;} else { // 在区间外,通过遍历因数是否在区间内判断原始位置是否安全original_safe = true;for (int d = 1; d * d <= n; ++d) {if (n % d == 0) {int a = d, b = n / d;if ((a >= L && a <= R) || (b >= L && b <= R)) {original_safe = false;break;}}}}if (original_safe) {cout << 0 << endl;return 0;}// 候选解A:向左移动到最近的安全位置int candidateA = -1;for (int m = n - 1; m >= 0; --m) {if (is_safe(m, L, R)) {candidateA = n - m;break;}}// 候选解B:向右移动到最近的安全位置int candidateB = -1;for (int m = n + 1; ; ++m) {if (is_safe(m, L, R)) {candidateB = m - n;break;}}// 如果候选解A不存在,则只考虑候选解Bif (candidateA == -1) {cout << candidateB << endl;} else if (candidateB == -1) {cout << candidateA << endl;} else {cout << min(candidateA, candidateB) << endl;}return 0;
}
题五:最大区间

/*
使用单调栈求解左右边界
1.列表项找到左边界:找到第一个比当前元素小的位置left[i],则Ai能够作为最小值扩展到left[i]+1位置
2.列表找到右边界:找出第一个比当前元素小的位置right[i],则Ai能够作为最小值扩展到right[i]-1位置
这样Ai作为最小值的最大子数组长度为right[i]-left[i]-1;
*/
#include<bits/stdc++.h>
using namespace std;
const int N=3e5+10;
long long n,a[N],minn;
stack <long long>st;//栈int main( )
{//根据题面得(R-L+1)*a[i]要尽可能大,所以我们可以从l[i]和r[i]下手//我们要求都要比他的区间要r[i]-l[i]-1+1//即可以完成第31行的代码scanf("%lld",&n);vector <int> l(n,-1);//答案数组1for(int i=0;i<n;i++)scanf("%lld",&a[i]);for(int i=0;i<n;i++){while(!st.empty() && a[st.top()]>=a[i])st.pop( );if(!st.empty())l[i]=st.top( );st.push(i);}//找左边第一个比他小的元素的下标(注意是下标)while(!st.empty())st.pop( ); //清空栈,避免干扰。vector <int> r(n,n);//答案数组2for(int i=n-1;i>=0;i--){while(!st.empty() && a[st.top()]>=a[i])st.pop( );if(!st.empty())r[i]=st.top( );st.push(i);}//找右边第一个比他小的元素的下标(注意是下标)for(int i=0;i<n;i++){minn=max(minn,(r[i]-l[i]-1)*a[i]);}printf("%lld",minn);
}
相关文章:
第十四届蓝桥杯大赛软件赛国赛C/C++研究生组
研究生C国赛软件大赛 题一:混乘数字题二:钉板上的正方形题三:整数变换题四:躲炮弹题五:最大区间 题一:混乘数字 有一点像哈希表: 首先定义两个数组,拆分ab和n 然后令n a*b 查看两个…...
innodb如何实现mvcc的
InnoDB 实现 MVCC(多版本并发控制)的机制主要依赖于 Undo Log(回滚日志)、Read View(读视图) 和 隐藏的事务字段。以下是具体实现步骤和原理: 1. 核心数据结构 InnoDB 的每一行数据(…...
多模态大语言模型arxiv论文略读(四)
A Survey on Multimodal Large Language Models ➡️ 论文标题:A Survey on Multimodal Large Language Models ➡️ 论文作者:Shukang Yin, Chaoyou Fu, Sirui Zhao, Ke Li, Xing Sun, Tong Xu, Enhong Chen ➡️ 研究机构: 中国科学技术大学、腾讯优图…...
空对象模式(Null Object Pattern)在C#中的实现详解
一 、什么是空对象模式 空对象模模是靠”空对孔象式是书丯一种引施丼文行为,行凌,凌万成,个默疤"空象象象象来飞䛿引用用用用电从延盈盈甘仙丿引用用用职从延务在仅代砷易行行 」这种燕式亲如要目的片片 也说媚平父如如 核心思烟 定义一个人 派一个 � 创建…...
在kotlin的安卓项目中使用dagger
在 Kotlin 的 Android 项目中使用 Dagger(特别是 Dagger Hilt,官方推荐的简化版)进行依赖注入(DI)可以大幅提升代码的可测试性和模块化程度。 1. 配置 Dagger Hilt 1.1 添加依赖 在 bu…...
(三)链式工作流构建——打造智能对话的强大引擎
上一篇:(二)输入输出处理——打造智能对话的灵魂 在前两个阶段,我们已经搭建了一个基础的智能对话,并深入探讨了输入输出处理的细节。今天,我们将进入智能对话的高级阶段——链式工作流构建。这一阶段的目…...
python三大库之---pandas(二)
python三大库之—pandas(二) 文章目录 python三大库之---pandas(二)六,函数6.1、常用的统计学函数6.2重置索引6.3 遍历6.3.1DataFrame 遍历6.3.2 itertuples()6.3.3 使用属性遍历 6.4 排序6.4.1 sort_index6.4.2 sort_…...
php7.4.3连接MSsql server方法
需要下载安装Microsoft Drivers for PHP for SQL Server驱动, https://download.csdn.net/download/tjsoft/90568178 实操Win2008IISphp7.4.3连接SqlServer2008数据库所有安装包资源-CSDN文库 适用于 SQL Server 的 PHP 的 Microsoft 驱动程序支持与 SQL Server …...
Flask返回文件方法详解
在 Flask 中返回文件可以通过 send_file 或 send_from_directory 方法实现。以下是详细方法和示例: 1. 使用 send_file 返回文件 这是最直接的方法,适用于返回任意路径的文件。 from flask import Flask, send_fileapp = Flask(__name__)@app.route("/download")…...
JS中的Promise对象
基本概念 Promise 是 JavaScript 中用于处理异步操作的对象。它代表一个异步操作的最终完成及其结果值。Promise 提供了一种更优雅的方式来处理异步代码,避免了传统的回调地狱。 Promise 有三种状态 Pending(等待中):初始状态&…...
macOS设置定时播放眼保健操
文章目录 1. ✅方法一:直接基于日历2. 方法二:基于脚本2.1 音乐文件获取(ncm转mp3)2.2 创建播放音乐任务2.3 脚本实现定时播放 1. ✅方法一:直接基于日历 左侧新建一个日历,不然会和其他日历混淆,看起来会有点乱 然后…...
Python 小练习系列 | Vol.14:掌握偏函数 partial,用函数更丝滑!
🧩 Python 小练习系列 | Vol.14:掌握偏函数 partial,用函数更丝滑! 本节的 Python 小练习系列我们将聚焦一个 冷门但高能 的工具 —— functools.partial。它的作用类似于“函数的预设模板”,能帮你写出更加灵活、优雅…...
记录学习的第二十三天
老样子,每日一题开胃。 我一开始还想着暴力解一下试试呢,结果不太行😂 接着两道动态规划。 这道题我本来是想用最长递增子序列来做的,不过实在是太麻烦了,实在做不下去了。 然后看了题解,发现可以倒着数。 …...
Web品质 - 重要的HTML元素
Web品质 - 重要的HTML元素 在构建一个优秀的Web页面时,HTML元素的选择和运用至关重要。这些元素不仅影响页面的结构,还直接关系到页面的可用性、可访问性和SEO表现。本文将深入探讨一些关键的HTML元素,并解释它们在提升Web品质方面的重要性。 1. <html> 根元素 HTM…...
SpringBoot整合sa-token,Redis:解决重启项目丢失登录态问题
SpringBoot整合sa-token,Redis:解决重启项目丢失登录态问题 🔥1. 痛点直击:为什么登录状态会消失?2.实现方案2.1.导入依赖2.2.新增yml配置文件 3.效果图4.结语 😀大家好!我是向阳🌞&…...
Python 字典和集合(子类化UserDict)
本章内容的大纲如下: 常见的字典方法 如何处理查找不到的键 标准库中 dict 类型的变种set 和 frozenset 类型 散列表的工作原理 散列表带来的潜在影响(什么样的数据类型可作为键、不可预知的 顺序,等等) 子类化UserDict 就创造自…...
npm fund 命令的作用
运行别人的项目遇到这个问题: npm fund 命令的作用 npm fund 是 npm 提供的命令,用于显示项目依赖中哪些包需要资金支持。这些信息来自包的 package.json 中定义的 funding 字段,目的是帮助开发者了解如何支持开源维护者。 典型场景示例 假…...
ES:账号、索引、ILM
目录 笔记1:账号权限查看、查看账号、创建账号等查看所有用户查看特定用户验证权限修改用户权限删除用户 笔记2:索引状态和内容的查看等查看所有索引查看特定索引内容查看索引映射查看索引设置查看索引统计信息查看ILM策略 笔记1:账号权限查看…...
哈希表(开散列)的实现
目录 引入 开散列的底层实现 哈希表的定义 哈希表的扩容 哈希表的插入 哈希表查找 哈希表的删除 引入 接上一篇,我们使用了闭散列的方法解决了哈希冲突,此篇文章将会使用开散列的方式解决哈希冲突,后面对unordered_set和unordered_map的…...
#在docker中启动mysql之类的容器时,没有挂载的数据...在后期怎么把数据导出外部
如果要导出 Docker 容器内的 整个目录(包含所有文件及子目录),可以使用以下几种方法: 方法 1:使用 docker cp 直接复制目录到宿主机 适用场景:容器正在运行或已停止(但未删除)。 命…...
[蓝桥杯] 挖矿(CC++双语版)
题目链接 P10904 [蓝桥杯 2024 省 C] 挖矿 - 洛谷 题目理解 我们可以将这道题中矿洞的位置理解成为一个坐标轴,以题目样例绘出坐标轴: 样例: 输入的5为矿洞数量,4为可走的步数。第二行输入是5个矿洞的坐标。输出结果为在要求步数…...
Johnson算法 流水线问题 java实现
某印刷厂有 6项加工任务J1,J2,J3,J4,J5,J6,需要在两台机器Mi和M2上完 成。 在机器Mi上各任务所需时间为5,1,8,5,3,4单位; 在机器M2上各任务所需时间为7,2,2,4,7,4单位。 即时间矩阵为: T1 {5, …...
远程监控系统项目里练习
1、项目目标 设备端: (1)基于stm32mp157开发板,裁剪linux5.10.10,完成ov5640摄像头移植; (2)完成用户层程序,完成对摄像头的控制及与云端服务的数据交互。 云端&…...
安装并配置Maven
如图所示,解压安装包,配置环境变量,在bin目录那个界面新建文件夹repository,写上安装路径的坐标,修改Maven仓库镜像,输入cmd验证是否安装成功 <mirror><id>alimaven</id><mirrorOf>…...
PlatformIO 自定义脚本选择编译库源文件 - 设置只用于C++ 的编译选项
PlatformIO 只支持以文件夹为单位选择要编译的源文件,不像Keil 或者CMake,可以手动控制每一个源文件。而且默认只会将库的src 文件夹下的源文件全部加入编译。比如,某个库的文件结构如下: libx src include mem| a.c| b.c| c.c…...
dolphinscheduler单机部署链接oracle
部署成功请给小编一个赞或者收藏激励小编 1、安装准备 JDK版本:1.8或者1.8oracle版本:19Coracle驱动版本:8 2、安装jdk 下载地址:https://www.oracle.com/java/technologies/downloads/#java8 下载后上传到/tmp目录下。 然后执行下面命…...
MongoDB常见面试题总结(上)
MongoDB 基础 MongoDB 是什么? MongoDB 是一个基于 分布式文件存储 的开源 NoSQL 数据库系统,由 C 编写的。MongoDB 提供了 面向文档 的存储方式,操作起来比较简单和容易,支持“无模式”的数据建模,可以存储比较复杂…...
java基础 迭代Iterable接口以及迭代器Iterator
Itera迭代 Iterable < T>迭代接口(1) Iterator iterator()(2) forEach(Consumer<? super T> action)forEach结合Consumer常见场景forEach使用注意细节 (3)Spliterator spliterator() Iterator< T>迭代器接口如何“接收” Iterator<T>核心方法迭代器的…...
CentOS禁用nouveau驱动
1、验证 nouveau 是否在运行 lsmod | grep nouveau如果命令返回结果,说明 nouveau 驱动正在运行。 2、编辑黑名单文件 通过编辑黑名单配置文件来禁用 nouveau 驱动,这样在系统启动时不会加载它。 vi /etc/modprobe.d/blacklist-nouveau.conf修改以下…...
Linux 时间同步工具 Chrony 简介与使用
一、Chrony 是什么? chrony 是一个开源的网络时间同步工具,主要由两个组件组成: chronyd:后台服务进程,负责与时间服务器交互,同步系统时钟。chronyc:命令行工具,用于手动查看或修…...

