第十二届蓝桥杯省赛真题(C/C++大学B组)

目录

#A 空间

#B 卡片

#C 直线

#D 货物摆放

#E 路径

#F 时间显示

#G 砝码称重

#H 杨辉三角形

#I 双向排序

#J 括号序列


#A 空间

#include <bits/stdc++.h>
using namespace std;

int main()
{
	cout<<256 * 1024 * 1024 / 4<<endl;
	
	return 0;
}

#B 卡片

#include <bits/stdc++.h>
using namespace std;

//存储0-9
int arr[10];

bool merge(int n)
{
	//数字n能否被拼成
	while(n > 0)
	{
		if(--arr[n%10] < 0) return false;
		n /= 10;	
	} 
	return true;
}
 
int main()
{
	for(int i = 0;i < 10;i++)
		arr[i] = 2021;
	//遍历 
	for(int i = 1;i < 1000000;i++) 
    	if(!merge(i)) 
    	{
    		cout<<i-1<<endl;
    		break;
		}
    return 0;
}

#C 直线

#include <bits/stdc++.h>
using namespace std;

const int X = 20, Y = 21;

int link[X][Y][X][Y], ans;

int main()
{
	for(int x1 = 0;x1 < X;x1++)
	{
		for(int y1 = 0;y1 < Y;y1++)
		{
			link[x1][y1][x1][y1] = 1;
			for(int x2 = 0;x2 < X;x2++)
			{
				for(int y2 = 0;y2 < Y;y2++)
				{
					// (x1,y1)->(x2,y2)
					if(!link[x1][y1][x2][y2])
					{
						int x = x1;
						int x_offset = x1 - x2;
						int y = y1;
						int y_offset = y1 - y2;
						while(x >= 0 && x < X && y >= 0 && y < Y)
						{
							x -= x_offset;
							y -= y_offset;
						}
						//所有加上偏移量的点都会被访问,全部剔除
						for(x += x_offset,y += y_offset; x >= 0 && x < X && y >= 0 && y < Y;x += x_offset,y += y_offset)
						{
							for(int xx = x,yy = y;xx >= 0 && xx < X && yy >= 0 && yy < Y;xx += x_offset,yy += y_offset)
							{
								link[x][y][xx][yy] = link[xx][yy][x][y] = 1;
							}
						}
						ans++;
					}
				}
			}
		}
	}
	cout<<ans<<endl;
	return 0;
}

#D 货物摆放

#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
ll N = 2021041820210418;
ll ans = 0;
int main()
{
	set<ll> sets;
	//2021041820210418
	//求这个数字的全部因子
	for(ll i = 1;i * i <= N;i++)
	{
		if(N % i == 0)
		{
			sets.insert(i);
			sets.insert(N / i);
		}
	}
	//遍历因子
	for(set<ll>::iterator i = sets.begin(); i != sets.end();i++)
	{
		for(set<ll>::iterator j = sets.begin(); j != sets.end();j++)
		{
			for(set<ll>::iterator k = sets.begin(); k != sets.end();k++)
			if(*i * *j * *k == N) ans++;
		}
	}
				
	cout<<ans<<endl; 
	return 0;
}

#E 路径

#include <bits/stdc++.h>
using namespace std;

const int n = 2021;
int metric[n+1][n+1];

int gcd(int a,int b)
{
	if(a % b == 0) return b;
	return gcd(b, a % b);
}
int lcm(int a,int b)
{
	return a * b / gcd(a,b);
}

int main()
{
	//每条边都给最大值
	for(int i = 0;i <= n;i++)
		for(int j = 0;j <= n;j++)
			metric[i][j] = 99999999;
			
	//计算结点之间的长度
	for(int a = 1;a <= n;a++)
	{
		for(int b = min(n,a+21);b > a;b--)
			metric[a][b] = metric[b][a] = lcm(a,b);
	}
	//弗洛伊德算法
	for(int k = 1;k <= n;k++)
		for(int i = 1;i <= n;i++)
			for(int j = 1;j <= n;j++)
				 metric[i][j] = min(metric[i][j], metric[i][k] + metric[k][j]);
				 
	cout<<metric[1][n]<<endl;
	
	return 0;
}

#F 时间显示

测试样例1

Input:
46800999

Output:
13:00:00

测试样例2

Input:
1618708103123

Output:
01:08:23
#include <bits/stdc++.h>
using namespace std;

typedef long long ll;

int main()
{
	ll n,second,minutes,hour;
	cin>>n;
	//时  分  秒
	n /= 1000;
	hour = (n / 60 / 60) % 24;
	minutes = (n / 60) % 60;
	second = n % 60;
	
	if(hour < 10) cout<<"0";
	cout<<hour<<":";
	if(minutes < 10) cout<<"0";
	cout<<minutes<<":";
	if(second < 10) cout<<"0";
	cout<<second;
	
	return 0;
}

#G 砝码称重

测试样例1

Input:
3
1 4 6

Output:
10

Explanation:
能称出的 10 种重量是:1、2、3、4、5、6、7、9、10、11。
1 = 1;
2 = 6 − 4 (天平一边放 6,另一边放 4);
3 = 4 − 1;
4 = 4;
5 = 6 − 1;
6 = 6;
7 = 1 + 6;
9 = 4 + 6 − 1;
10 = 4 + 6;
11 = 1 + 4 + 6。
#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
const int N = 100000+1;
/*
	定义一个二维数组,分为两行
	第一行用来存储可以被称出的重量,第j列表示的就是重量j
	第二行用来临时存放称出的重量,作为重量的中转站
	dp[i][j] == true时,表示重量j可以被称出
	dp[i][j] == false时,表示重量j不能被称出
*/
bool dp[2][N];

int main()
{
	int n,w,sum = 0;
	cin>>n;
	for(int i = 0;i < n;i++)
	{
		cin>>w;
		sum += w;
		//从重量1开始计算
		for(int j = 1;j <= sum;j++)
		{
			if(dp[0][j])
			{
				dp[1][abs(w-j)] = true;
				dp[1][w+j] = true;
			}
		}
		//将第二行数据移动到第一行
		for(int j = 1;j <= sum;j++)
		{
			if(dp[1][j]) dp[0][j] = true;
		}
		//当前砝码可以被称出 
		dp[0][w] = true;
	}
	int ans = 0;
	for(int i = 0;i <= sum;i++)
		if(dp[0][i]) ans++;
	
	cout<<ans<<endl;
	
	return 0;
}

#H 杨辉三角形

测试样例1

Input:
6

Output:
13
#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
ll arr[45000];

int main()
{
	ll n;
	cin>>n;
	if(n == 1) 
	{
		cout<<1<<endl;
		return 0;
	}
	arr[0] = 1;
	ll count = 1;
	//从第二行开始
	for(int i = 1;i < 45000;i++)
	{
		//从右向左移动 
		for(int j = i;j > 0;j--)
		{
			arr[j] += arr[j-1];
			if(arr[j] == n)
			{
				count += i - j + 1;
				cout<<count<<endl;
				return 0;
			}
		}
		count += (i + 1);
	} 
	//如果某一行的第三列数值已经大于10亿了,说明在这之前都没有对应的数字,这个数字就只能出现在第二列中了 
	//递增数列求和即可 
	cout<<(1 + n)*n / 2 + 2<<endl;
	
	return 0;
}

#I 双向排序

测试样例1

Input:
3 3
0 3
1 2
0 2

Output:
3 1 2

Explanation:
原数列为 (1, 2, 3)。
第 1 步后为 (3, 2, 1)。
第 2 步后为 (3, 1, 2)。
第 3 步后为 (3, 1, 2)。与第 2 步操作后相同,因为前两个数已经是降序了。
#include <bits/stdc++.h>
using namespace std;

const int N = 100000;
int arr[N];

int main()
{
	
	int n,m,p,q;
	cin >>n>>m;
	for(int i = 0;i < n;i++)
		arr[i] = i + 1;
	
	for(int i = 0;i < m;i++)
	{
		cin>>p>>q;
		if(p == 1)
		{
			sort(arr+q-1,arr+n,less<int>());
		}
		else
		{
			sort(arr,arr+q,greater<int>());
		}
	}
	for(int i = 0;i < n;i++)
			cout<<arr[i]<<" ";

	return 0;
}

#J 括号序列

测试样例1

Input:
((()

Output:
5

不会

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

JVM性能监控与调优——命令行工具

文章目录 1、概述2、jps:查看正在运行的Java进程3、jstat&#xff1a;查看JVM统计信息4、jinfo&#xff1a;实时查看和修改JVM配置参数5、jmap&#xff1a;导出内存映像文件和内存使用情况6、jhat:JDK自带堆分析工具7、jstack&#xff1a;打印JVM中线程快照8、jcmd&#xff1a;…

第一个Swift程序

要创建第一个Swift项目,请按照以下步骤操作: 打开Xcode。如果您没有安装Xcode,可以在App Store中下载并安装它。在Xcode的欢迎界面上,选择“Create a new Xcode project”(创建新Xcode项目)。在模板选择界面上,选择“App”(应用程序)。在应用模板选择界面上,选择“Si…

【静态分析】静态分析笔记01 - Introduction

参考&#xff1a; BV1zE411s77Z [南京大学]-[软件分析]课程学习笔记(一)-introduction_南京大学软件分析笔记-CSDN博客 ------------------------------------------------------------------------------------------------------ 1. program language and static analysis…

【JavaWeb】Jsp基本教程

目录 JSP概述作用一个简单的案例&#xff1a;使用JSP页面输出当前日期 JSP处理过程JSP 生命周期编译阶段初始化阶段执行阶段销毁阶段案例 JSP页面的元素JSP指令JSP中的page指令Include指令示例 taglib指令 JSP中的小脚本与表达式JSP中的声明JSP中的注释HTML的注释JSP注释 JSP行…

llinux进程控制

学习进程创建,fork/vfork 学习到进程等待 学习到进程程序替换, 微型shell&#xff0c;重新认识shell运行原理 学习到进程终止,认识$? fork函数 在linux中fork函数时非常重要的函数&#xff0c;它从已存在进程中创建一个新进程。新进程为子进程&#xff0c;而原进程为父进程…

PostgreSQL入门到实战-第十五弹

PostgreSQL入门到实战 PostgreSQL数据过滤(八)官网地址PostgreSQL概述PostgreSQL中LIKE命令理论PostgreSQL中LIKE命令实战更新计划 PostgreSQL数据过滤(八) 如何使用PostgreSQL LIKE运算符基于模式查询数据。 官网地址 声明: 由于操作系统, 版本更新等原因, 文章所列内容不一…

Commitizen:规范化你的 Git 提交信息

简介 在团队协作开发过程中&#xff0c;规范化的 Git 提交信息可以提高代码维护的效率&#xff0c;便于追踪和定位问题。Commitizen 是一个帮助我们规范化 Git 提交信息的工具&#xff0c;它提供了一种交互式的方式来生成符合约定格式的提交信息。 原理 Commitizen 的核心原…

人工智能分类算法概述

文章目录 人工智能主要分类算法决策树随机森林逻辑回归K-均值 总结 人工智能主要分类算法 人工智能分类算法是用于将数据划分为不同类别的算法。这些算法通过学习数据的特征和模式&#xff0c;将输入数据映射到相应的类别。分类算法在人工智能中具有广泛的应用&#xff0c;如图…

每日一题(leetcode2529):正整数和负整数的最大计数--二分法

因为需要O&#xff08;logn&#xff09;的复杂度&#xff0c;所以考虑使用二分法&#xff0c;先找到负数里面的最大下标&#xff08;初始值定为-1&#xff09;&#xff0c;再找到第一个正数的下标&#xff08;初始值定为数组长度值&#xff09;。最后求出个数并进行比较即可。 …

操作系统的基础知识:操作系统的特征:并发,共享,虚拟,异步

操作系统的特性&#xff1a; 1.并发 并发:指两个或多个事件在同一时间间隔内发生。这些事件宏观上是同时发生的&#xff0c;但微观上是交替注意&#xff1a;并行:指两个或多个事件在同一时刻同时发生。 操作系统的并发性指计算机系统中“同时”运行着多个程序&#xff0c;这…

【Entity Framework】聊聊EF中键

【Entity Framework】聊聊EF中键 文章目录 【Entity Framework】聊聊EF中键一、概述二、配置主键2.1 约定配置主键2.2 单个属性配置为实体主键2.3 组合主键 三、主键名称四、键类型和值五、备用键 一、概述 键用作每个实体实例的唯一标识符。EF中的大多数实体都有一个键&#…

langchain-chatchat加载Azure Open AI

1.找到knowledge_base_chat.py文件中的get_ChatOpenAI函数 2.按crtl进入get_ChatOpenAI函数位置 3.注释原先的get_ChatOpenAI函数&#xff0c;修改成以下内容&#xff1a; def get_ChatOpenAI(model_name: str,temperature: float,streaming: bool True,callbacks: List[Ca…

5款最值得推荐的电脑监控软件丨高人气甄选

在企业和学校等场所&#xff0c;电脑监控软件被广泛应用于员工或学生的行为管理。 通过监控软件&#xff0c;管理者可以了解员工或学生的学习和工作情况&#xff0c;及时发现并纠正不当行为&#xff0c;提高工作效率和学习效果。同时&#xff0c;这类软件还可以用于保护企业机…

13 指针(上)

指针是 C 语言最重要的概念之一&#xff0c;也是最难理解的概念之一。 指针是C语言的精髓&#xff0c;要想掌握C语言就需要深入地了解指针。 指针类型在考研中用得最多的地方&#xff0c;就是和结构体结合起来构造结点(如链表的结点、二叉树的结点等)。 本章专题脉络 1、指针…

SQL注入的其他攻击思路方法与Python脚本设计思路

SQL注入的其他攻击思路方法与Python脚本设计思路 也是很早就写了&#xff0c;也备个份吧 注意&#xff1a;在接下来的攻击方式中&#xff0c;由于实现的条件较为苛刻&#xff0c;并且需要较高权限&#xff0c;有的师傅又称之为高权限攻击 利用文件读取进行SQL注入 上一篇文章提…

mysql8主从复杂原理分析

MySQL 复制&#xff08;Replication&#xff09; 是官方提供的主从复制&#xff08;源到副本的复制&#xff09;方案&#xff0c;用于将一个 MySQL 的实例同步到另一个实例中。 这是使用最广泛的容灾方案&#xff08;重点掌握&#xff09;。 复制&#xff08;Replication&…

编译器如何理解C++的指针和引用?

初学引用时&#xff0c;往往很难真正理解引用&#xff0c;它与指针究竟有什么区别和联系。下面我们不妨看看编译器如何理解引用和指针的。 一.函数通过指针传参 1.1 示例代码 #include <iostream>using namespace std;void swap(int *x,int *y)//指针传参 {int tmp;t…

【机器学习300问】66、ReLU激活函数相对于Sigmoid和Tanh激活函数的优点是什么?ReLU它有局限性吗?如何改进?

一、ReLU相对于Sigmoid和Tanh的优点 &#xff08;1&#xff09;计算效率高 ReLU函数数学形式简单&#xff0c;仅需要对输入进行阈值操作&#xff0c;大于0则保留&#xff0c;小于0则置为0。Sigmoid和Tanh需要指数运算但ReLU不需要。所以相比之下它会更快&#xff0c;降低了神经…

agi入门-大模型开发基础

AGI(Artifical General Inteligence)的到来还有多久&#xff1f; 乐观预测&#xff1a;明年主流预测&#xff1a;3-5年悲观预测&#xff1a;10年 AGI时代&#xff0c;AI无处不在&#xff0c;相关从来者将如何分&#xff1f; AI使用者&#xff1a;使用别人开发的AI产品AI产品…

让链接直接唤起应用,Xinstall助力提升用户体验

在移动互联网时代&#xff0c;应用程序已成为我们日常生活的重要组成部分。然而&#xff0c;有时候我们在浏览器或其他应用中看到一个有趣的链接&#xff0c;想要打开对应的应用查看更多内容&#xff0c;却需要手动复制链接&#xff0c;再打开应用粘贴查看。这样的操作繁琐且不…