24.第12届蓝桥杯省赛真题题解

news2024/12/23 20:34:09

A.空间(100%)

计算机存储单位计算

1TB=2^10 GB

1GB=2^10 MB

1MB=2^10 KB

1KB=2&10 B

1B=8 bit(bit位二进制的最小的存储单位)

#include <iostream>
#include <cmath>

using namespace std;
//2^28B  2^2

int main(){
    std::ios::sync_with_stdio(false);
    cin.tie(0);cout.tie(0);
    cout<<(int)pow(2,26)<<endl;
    return 0;
}

B.卡片(100%)

#include <iostream>
#include <cmath>

using namespace std;
const int N=20;
int cnt[N];
int main(){ 
	std::ios::sync_with_stdio(false);
	cin.tie(0);cout.tie(0);
	int n=2021;
	for(int i=0;i<=9;i++){
		cnt[i]=n;
	}
	bool flag=false;
	int x;
	for(x=1;;x++){
		int t=x;
		while(t){
			//123
			int num=t%10;
			if(--cnt[num]<0){
				flag=true;
				break;
			}
			t=t/10;
		}
		if(flag) break;
	}
	cout<<x-1<<endl;
	return 0;
} 

C.直线(100%)

根据y=kx+b 俩个点确定唯一的一个(k,b)对 放在set中去重加 输出个数
#include <iostream>
#include <cmath>
#include <set>
using namespace std;

int main(){
    std::ios::sync_with_stdio(false);
    cin.tie(0);cout.tie(0);
    set<pair<double,double>> st;
    for(int x1=0;x1<=19;x1++){
        for(int y1=0;y1<=20;y1++){
            for(int x2=x1+1;x2<=19;x2++){
                for(int y2=0;y2<=20;y2++){
                    double k=(y2-y1)*1.0/(x2-x1);
                    double b=(y1 * x2 - y2 * x1) *1.0/ (x2 - x1);
                    st.insert({k,b});
                }
            }
        }
    }
    cout<<st.size()+20<<endl;
    return 0;
}

D.物品摆放(100%)

枚举3个位置的值

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

#include <iostream>
#include <vector>
#define int long long 
using namespace std;
int n=2021041820210418,ans;
vector<int> vec;
signed main(){ 
	std::ios::sync_with_stdio(false);
	cin.tie(0);cout.tie(0);
	for(int i=1;i*i<=n;i++){
		if(n%i==0){//是因子 16
			vec.push_back(i);//2
			if(i!=n/i) vec.push_back(n/i);//8
		}
	}
	for(int i=0;i<vec.size();i++){
		for(int j=0;j<vec.size();j++){
			for(int k=0;k<vec.size();k++){
				if(vec[i]*vec[j]*vec[k]==n){
					ans++;
				}
			}
		}
	} 
	cout<<ans<<endl;
	return 0;
} 

E.路径(100%)

Dijkstra(单源最短路)

时间复杂度O(n^2)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

不用邻接表邻接矩阵版本

#include <iostream>
#include <climits>
#include <cmath>
using namespace std;
const int N=2021;
int n=2021,mindis[N],st=1,t=2021;
bool vis[N];
int gcd(int a,int b){
    return b==0? a:gcd(b,a%b);
}
int lcm(int a,int b){
    return a/gcd(a,b)*b;
}
void dijkstra(int s){
    mindis[s]=0;
    for(int i=1;i<=n;i++){
        int mi=INT_MAX,miId=0;
        for(int j=1;j<=n;j++){
            if(!vis[j]&&mi>mindis[j]){
                mi=mindis[j];
                miId=j;
            }
        }
        vis[miId]=1;
        for(int i=1;i<=n;i++){
            if(miId-i!=0&&abs(miId-i)<=21&&!vis[i]){
                int id=i,w=lcm(miId,id);
                if(mi+w<mindis[id]){
                    mindis[id]=mi+w;
                }
            }
        }
    }
}

int main(){
    std::ios::sync_with_stdio(false);
    cin.tie(0);cout.tie(0);
    for(int i=1;i<=n;i++) mindis[i]=INT_MAX;
    dijkstra(st);
    cout<<mindis[t]<<endl;
    return 0;
}

邻接表版本

#include <iostream>
#include <vector>
#include <cmath>
#include <climits>
#define int long long

using namespace std;
const int N=3e3+10,INF=INT_MAX;
vector<pair<int,int>> g[N];
int n=2021,mindis[N],st=1,t=2021;
bool vis[N];
//mindis[i]-->起点到i点的最短路 
//6 12 
int gcd(int a,int b){
	return b==0?a:gcd(b,a%b);
}
int lcm(int a,int b){
	return a/gcd(a,b)*b;
}
void dijkstra(int s){
	mindis[s]=0;
	for(int i=1;i<=n;i++){
		int mi=INT_MAX,miId=0;
		//在集合中找到未被标记过的最小值,即起点到该点的最短路 
		for(int j=1;j<=n;j++){
			if(!vis[j]&&mi>mindis[j]){
				mi=mindis[j];
				miId=j;
			}
		}
		vis[miId]=1;
		//以miId位中转点,访问miId未被标记过的邻接点,更新集合 
		for(int j=0;j<g[miId].size();j++){
			int id=g[miId][j].first,w=g[miId][j].second;
			if(!vis[id]&&mindis[id]>mi+w){
				mindis[id]=mi+w;
			}
		}
	}
} 
signed main(){ 
	std::ios::sync_with_stdio(false);
	cin.tie(0);cout.tie(0);
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			if(i!=j&&abs(i-j)<=21){
                //无向图,双向连边
				g[i].push_back({j,lcm(i,j)});g[j].push_back({i,lcm(i,j)});
			}
		}
	}
	fill(mindis+1,mindis+n+1,INF);
	dijkstra(st);
	cout<<mindis[t];
	return 0;
} 

Floyd(多元最短路)

三层for循环 时间复杂度O(n^3)
#include <iostream>
#include <vector>
#include <cmath>
#include <climits>
#define int long long

using namespace std;
const int N=3e3+10,INF=INT_MAX;
int n=2021,mindis[N][N],st=1,t=2021;
bool vis[N];
//mindis[i][j]-->起点i到j点的最短路 
//6 12 
int gcd(int a,int b){
	return b==0?a:gcd(b,a%b);
}
int lcm(int a,int b){
	return a/gcd(a,b)*b;
}
void floyd(){
    //枚举中转站
	for(int k=1;k<=n;k++){
        //枚举起点
		for(int i=1;i<=n;i++){
            //枚举终点
			for(int j=1;j<=n;j++){
                //判断是否又连边
				if(mindis[i][k]!=INF&&mindis[k][j]!=INF){
                    //判断是否需要更新mindis集合
					if(mindis[i][k]+mindis[k][j]<mindis[i][j]){
						mindis[i][j]=mindis[i][k]+mindis[k][j];
					}
				}
			}
		}
	}
}
signed main(){ 
	std::ios::sync_with_stdio(false);
	cin.tie(0);cout.tie(0);
	fill(mindis[0],mindis[0]+N*N,INF);
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			if(i!=j&&abs(i-j)<=21){
				mindis[i][j]=mindis[j][i]=lcm(i,j);
			}
		}
	}
	floyd();
	cout<<mindis[st][t]<<endl;
	return 0;
} 

F.时间显示(100%)

#include <iostream>
#include <algorithm>
#define int long long
using namespace std;
int HH,MM,SS,x1,x2;
const int DAY=24*60*60,H=60*60,M=60;
//1618708103123
//449641:08:23
signed main(){ 
	std::ios::sync_with_stdio(false);
    	cin.tie(0);cout.tie(0);
	int n;cin>>n;//1618708103123
	n=n/1000;//46863
	HH=n/H%24;//13
	x1=n%H;//63
	MM=x1/M;//1
	x2=x1%M;//3
    SS=x2;
    printf("%02ld:%02ld:%02ld\n",HH,MM,SS);
    return 0;
}

G.砝码称重(10%)

搜索+回溯

#include <iostream>
#include <vector>
#include <cmath>
#include <climits>
#include <set>
#define int long long

using namespace std;
const int N=1e5+10;
int a[N],n; 
bool vis[N];
set<int> st; 
void dfs(int sum,int depth){
	//3
	//1 4 6
	//insert   d 1 sum 1
	//insert 1 d 2 sum 5
	//insert 5 d 3 sum 10
	//insert 10d 4 sum  
	if(depth>=2) st.insert(sum);
	if(depth==n+1) return;
	
	
	for(int i=1;i<=n;i++){
		if(!vis[i]){
			vis[i]=1;
			dfs(sum+a[i],depth+1);
			dfs(abs(sum-a[i]),depth+1);
			vis[i]=0;
		}
	}
}
signed main(){ 
	std::ios::sync_with_stdio(false);
	cin.tie(0);cout.tie(0);
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	dfs(0,1);
	if(st.find(0)!=st.end()) st.erase(0);
	cout<<st.size()<<endl;
	return 0;
} 

H.杨辉三角(40%)

#include <iostream>
#define int long long
using namespace std;
const int N=1e3+10;
int a[N][N];
int n=1e2+10,ans;
signed main(){
    std::ios::sync_with_stdio(false);
    cin.tie(0);cout.tie(0);
    int t;cin>>t;
    for(int i=1;i<=n;i++){
        a[i][1]=1;
        a[i][i]=1;
    }
    for(int i=3;i<=n;i++){
        for(int j=2;j<=i-1;j++){
            a[i][j]=a[i-1][j]+a[i-1][j-1];
        }
    }
    for(int i=1;i<=n;i++){
        for(int j=1;j<=i;j++){
            if(a[i][j]==t){
                cout<<++ans<<endl;
                return 0;
            }
            ans++;
        }
    }
    return 0;
}

I.双向排序(60%)

#include <iostream>
#include <algorithm>
//#define int long long
using namespace std;
const int N=1e5+10;
int a[N],n,m;
bool cmp(int l,int r){
    return l>r;
}
signed main(){
    std::ios::sync_with_stdio(false);
    cin.tie(0);cout.tie(0);
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        a[i]=i;
    }
    int sign,k;
    while(m--){
        cin>>sign>>k;
        if(sign==0){//从1到k降序
            sort(a+1,a+k+1,cmp);
        }
        else{//从k到n升序
            sort(a+k,a+n+1);
        }
    }
    for(int i=1;i<=n;i++){
        cout<<a[i]<<' ';
    }
    return 0;
}

J.括号序列(100%)

#include <iostream>
#include <string>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;
#define int long long
const int N = 5e3 + 10, mod = 1e9 + 7; // 定义常量N和mod,mod用于计算结果的模数
int n; // 输入的字符串长度
string str; // 存储输入的括号序列
int f[N][N]; // 动态规划数组,f[i][j]表示前i个字符中有j个左括号待匹配时的方案数量
 
// calc函数用于计算结果
int calc() {
    memset(f, 0, sizeof(f)); // 初始化动态规划数组
    f[0][0] = 1; // 初始状态设为1,表示没有任何括号的情况只有一种可能
    for (int i = 1; i <= n; i++) { // 遍历输入的括号序列
        if (str[i] == '(') { // 如果当前字符是左括号
            for (int j = 1; j <= n; j++) { // 遍历所有可能的未匹配的左括号数量
                f[i][j] = f[i - 1][j - 1]; // 状态转移,因为遇到左括号,需要匹配的左括号数量减少1
            }
        }
        else { // 如果当前字符是右括号
            f[i][0] = (f[i - 1][0] + f[i - 1][1]) % mod; // 状态转移,如果之前没有未匹配的左括号,只能添加一个左括号,否则可以不添加或添加一个左括号
            for (int j = 1; j <= n; j++) { // 遍历所有可能的未匹配的左括号数量
                f[i][j] = (f[i - 1][j + 1] + f[i][j - 1]) % mod; // 状态转移,因为遇到右括号,需要匹配的左括号数量增加1,或者添加一个右括号来消除一个未匹配的左括号
            }
        }
    }
    for (int i = 0; i <= n; i++) { // 遍历所有可能的未匹配的左括号数量
        if (f[n][i]) { // 如果存在合法的方案
            return f[n][i]; // 返回方案数量
        }
    }
    return -1; // 如果没有合法的方案,返回-1
}
 
signed main() {
    cin >> str; // 输入括号序列
    n = str.size(); // 计算括号序列的长度
    str = " " + str; // 在字符串前添加一个空格,便于索引操作
    int l = calc(); // 调用calc函数计算结果
    reverse(str.begin() + 1, str.end()); // 反转括号序列
    for (int i = 1; i <= n; i++) { // 将括号序列中的左括号和右括号互换
        if (str[i] == '(') str[i] = ')';
        else str[i] = '(';
    }
    int r = calc(); // 再次调用calc函数计算结果
    printf("%lld\n", l * r % mod); // 输出结果,即两次计算结果的乘积对mod取模
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1523627.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL初阶3——事务的初步理解

目录 一、事务的引入⭐⭐⭐⭐⭐ 1. 为什么需要事务 2. 事务的四大特性 二、事务的具体细节⭐⭐⭐⭐⭐ 1. 事务在并发会遇到的三种常见问题 2. MySQL事务隔离的四种级别 三、MySQL中如何开启事务 四、补充 很荣幸与诸君在篇文章“相遇”&#xff0c;祝大家身体健康&…

UnityShader:IBL

效果&#xff1a; 实现&#xff1a; Shader "MyShader/IBL" {Properties{_CubeMap ("环境贴图", Cube) "white" {}_Exposure("曝光",float)1.0_Color("颜色",color)(1,1,1,1)_NormalMap("法线贴图",2d)"bu…

JS仿淘宝滚动刷新简单实现

废话不多说&#xff0c;直接上代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title></title><style>* {margin: 0;padding: 0;}.box {width: 24.5%;height: 200px;float: left;}.box>…

#QT(事件--快捷键保存文件)

1.IDE&#xff1a;QTCreator 2.实验&#xff1a;QEvent,QMouseEvent,QKeyEvent。 在上一个文本编辑器的基础上实现快捷键"ctrls"保存文件。 3.记录 &#xff08;1&#xff09;查看QEVENT的有效事件 &#xff08;2&#xff09; 所有时间均继承于QEvent&#xff0c;任…

机试:元音处理

问题描述 代码示例 #include <bits/stdc.h> using namespace std;int main(){char string[1000];char ch getchar();int i 0;while(ch ! \n){string[i] ch;ch getchar();}char str[1000];int k 0;for(int j 0; j < i; j){if(string[j] a || string[j] e || …

(含链接)2024年NVIDIA GPU技术大会开发者合集(专为开发者挑选的合集)

2024年NVIDIA GPU技术大会开发者合集 我专门为开发者整理了NVIDIA GPU技术大会上专注技术的内容合集, 希望可以帮助开发者朋友们快速了解NVIDIA的最新技术. 注意:在电脑端打开更友好, 可以直接进入每一项的网页 文章目录 2024年NVIDIA GPU技术大会开发者合集如何登录和预约会…

Nacos注册中心与配置管理

Nacos注册中心与配置管理 1 Nacos注册中心1.1.认识Nacos1.2.服务注册到nacos1.3.服务分级存储模型1.4.权重配置1.5.环境隔离1.6.Nacos与Eureka的区别 2 CAP3.Nacos配置管理3.1.统一配置管理3.2.bootstrap了解3.3.配置热更新3.4.配置共享 1 Nacos注册中心 1.1.认识Nacos 国内公…

【经验总结】ubuntu 20.04 git 上传本地文件给 github,并解决出现的问题

1. 在GitHub 上创建仓库 登录 GitHub 个人网站 点击 New 填写 Repository name, 以及 Description (optional) 选择 Public &#xff0c; 并添加 Add a README file 点击 Create repository github repository 创建成功 2. 设置SSH key 在本地 bash 运行&#xff1a;…

Android Kotlin(五)数据流StateFlow和LiveData

Android 上的 Kotlin 数据流 在协程中&#xff0c;与仅返回单个值的挂起函数相反&#xff0c;数据流可按顺序发出多个值。数据流以协程为基础构建&#xff0c;可提供多个值。从概念上来讲&#xff0c;数据流是可通过异步方式进行计算处理的一组数据序列。所发出值的类型必须…

小迪安全42WEB攻防-通用漏洞文件包含LFIRFI伪协议

#知识点: 1、解释什么是文件包含 2、分类-本地LFI&远程RFI 3、利用-配合上传&日志&会话 4、利用-伪协议&编码&算法等 #核心知识: 1、本地包含LFI&远程包含RF1-区别 一个只能包含本地&#xff0c;一个可以远程加载 具体形成原因由代码和环境配置文件决定…

PyQt5使用

安装Pyqt5信号与槽使用可视化界面编辑UI (Pyside2)ui生成之后的使用(两种方法)1 ui转化为py文件 进行import2 动态调用UI文件 安装Pyqt5 pip install pyqt5-tools这时候我们使用纯代码实现一个简单的界面 from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButto…

练习8 Web [GYCTF2020]Blacklist

这道题其实不是堆叠注入&#xff0c;但是我在联合查询无效后&#xff0c;试了一下堆叠&#xff0c;最后一步发现被过滤的sql语句太多了&#xff0c;完全没法 查阅其他wp的过程[GYCTF2020]Blacklist 1&#xff08;详细做题过程&#xff09; 是用的handler语句&#xff0c;只能用…

基于肤色模型(YCbCr模型)的人面定位统计算法,Matlab实现

博主简介&#xff1a; 专注、专一于Matlab图像处理学习、交流&#xff0c;matlab图像代码代做/项目合作可以联系&#xff08;QQ:3249726188&#xff09; 个人主页&#xff1a;Matlab_ImagePro-CSDN博客 原则&#xff1a;代码均由本人编写完成&#xff0c;非中介&#xff0c;提供…

【渗透测试】redis漏洞利用

redis安装及配置 wget http://download.redis.io/releases/redis-3.2.0.tar.gz tar xzf redis-3.2.0.tar.gz cd redis-3.2.0 make cp /root/redis-6.2.6/redis.conf /usr/local/redis/bin/ cd /usr/local/redis/bin/ vi redis.conf #修改内容如下&#xff1a; #protected-mode …

第十三届蓝桥杯(C/C++ 大学B组)

目录 试题 A: 九进制转十进制 试题 B: 顺子日期 试题 C: 刷题统计 试题 D: 修剪灌木 试题 E: X 进制减法 试题 F: 统计子矩阵 试题 G: 积木画 试题 H: 扫雷 试题 I: 李白打酒加强版 试题 J: 砍竹子 试题 A: 九进制转十进制 九进制正整数 ( 2022 )转换成十进制等于多…

【Vite+Ts】自动按需引入Element-Plus

安装插件 cnpm i -D unplugin-vue-components unplugin-auto-import unplugin-element-plus修改vite.config.ts // vite.config.ts import AutoImport from "unplugin-auto-import/vite"; import Components from "unplugin-vue-components/vite"; impor…

字符串函数和内存函数的模拟实现

目录 前言 1. 字符串操作 1.1 strncpy 1.1.1 讲解 1.1.1 模拟实现 1.2 strncat 1.2.1 讲解 1.2.2 模拟实现 2. 字符串检验 2.1 strlen 2.1.1 讲解 2.1.2 模拟实现 2.2 strstr 2.2.1 讲解 2.2.2 模拟实现 3. 字符数组操作 3.1 memcpy 3.1.1 讲解 3.1.2 模拟实…

《操作系统实践-基于Linux应用与内核编程》第10章--实验 Qt聊天程序

前言: 内容参考《操作系统实践-基于Linux应用与内核编程》一书的示例代码和教材内容&#xff0c;所做的读书笔记。本文记录再这里按照书中示例做一遍代码编程实践加深对操作系统的理解。 引用: 《操作系统实践-基于Linux应用与内核编程》 作者&#xff1a;房胜、李旭健、黄…

15届蓝桥杯第三期模拟赛所有题目解析

文章目录 &#x1f9e1;&#x1f9e1;t1_奇数次数&#x1f9e1;&#x1f9e1;思路代码 &#x1f9e1;&#x1f9e1;t2_台阶方案&#x1f9e1;&#x1f9e1;思路代码 &#x1f9e1;&#x1f9e1;t3_约数个数&#x1f9e1;&#x1f9e1;思路代码 &#x1f9e1;&#x1f9e1;t4_最…

特殊文本文件、日志技术

特殊文件 为什么要用这些特殊文件&#xff1f; 存储多个用户的&#xff1a;用户名、密码 特殊文件:Properties属性文件 特点&#xff1a; 都只能是键值对键不能重复文件后缀一般是.properties结尾的 作用&#xff1a;存储一些有关系的键值对数据 Properties 是一个Map集合(键…