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

目录

试题 A: 九进制转十进制

试题 B: 顺子日期

试题 C: 刷题统计

试题 D: 修剪灌木

试题 E: X 进制减法

试题 F: 统计子矩阵

试题 G: 积木画

试题 H: 扫雷

试题  I: 李白打酒加强版

试题 J: 砍竹子


试题 A: 九进制转十进制

九进制正整数 ( 2022 )转换成十进制等于多少?

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

int main()
{
	int c, ans = 0;
    while (c = getchar(), '0' <= c && c <= '9')
        ans = ans * 9 + c - '0';
	cout<<ans<<endl; //1478
	return 0;
}

试题 B: 顺子日期

小明特别喜欢顺子。顺子指的就是连续的三个数字: 123 、 456 等。顺子日期指的就是在日期的 yyyymmdd表示法中,存在任意连续的三位数是一个顺子的日期。例如 20220123 就是一个顺子日期,因为它出现了一个顺子:123;而 20221023则不是一个顺子日期,它一个顺子也没有。小明想知道在整个 2022 年份中,一共有多少个顺子日期。

#include <bits/stdc++.h>

using namespace std;
int date1[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};    //确定2022年的每月的天数
int main()
{
    int b[8];                              //b[0]到b[4]表示的是2022年
    b[0] = 2;
    b[1] = 0;        
    b[2] = 2;
    b[3] = 2;
    int sum = 0;
    for (int i = 1; i <= 12; i++)         //从一月到12月
    {
        b[4] = i / 10;                //月数的高位
        b[5] = i % 10;                //月数的低位
        for (int j = 1; j <= date1[i]; j++)   //从每月的第一天到最后一天
        {
            b[6] = j / 10;                //表示天数的高位
            b[7] = j % 10;                //表示天数的低位
            if ((b[4] + 1 == b[5] && b[5] + 1 == b[6]) || (b[5] + 1 == b[6] && b[6] + 1 == b[7]))  //如果是顺子日期就+1
            {
                sum++;
            }
        }
    }
    cout << sum << endl;
    return 0;
}

试题 C: 刷题统计

小明决定从下周一开始努力刷题准备蓝桥杯竞赛。他计划周一至周五每天做 a道题目,周六和周日每天做 b道题目。请你帮小明计算,按照计划他将在第几天实现做题数大于等于 n题?

输入格式:输入一行包含三个整数a,b和n。

输出格式:输出一个整数代表天数。

样例输入:10 20 99

样例输出:8

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

int main()
{
    long long a,b,n,ans;
    cin>>a>>b>>n; 
	ans = n / (5 * a + 2 * b) * 7;
    n %= 5 * a + 2 * b;
    if (n > 5 * a)
        ans += 5 + ((n - 5 * a) + b - 1) / b;
    else
        ans += (n + a - 1) / a;

	cout<<ans<<endl;
	return 0;
}

试题 D: 修剪灌木

爱丽丝要完成一项修剪灌木的工作。

  有 N 棵灌木整齐的从左到右排成一排。爱丽丝在每天傍晚会修剪一棵灌木,让灌木的高度变为 0  厘米。爱丽丝修剪灌木的顺序是从最左侧的灌木开始,每天向右修剪一棵灌木。当修剪了最右侧的灌木后,她会调转方向,下一天开始向左修剪灌木。直到修剪了最左的灌木后再次调转方向。然后如此循环往复。

  灌木每天从早上到傍晚会长高 1 厘米,而其余时间不会长高。在第一天的早晨,所有灌木的高度都是 0 厘米。爱丽丝想知道每棵灌木最高长到多高。

输入格式:一个正整数N,含义如题面所述。

输出格式:输出N行,每行一个整数,表示从左到右第i棵树最高能长到多高。

样例输入:3

样例输出:

4

2

4

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

int n,a[10005];

int main()
{
	int n;
	cin>>n;
	for(int i = 1;i <= n;i++)
	{
		cout<<max(2*(i-1),2*(n-i))<<endl;
	}
	return 0;
}

试题 E: X 进制减法

进制规定了数字在数位上逢几进一。

  X 进制是一种很神奇的进制,因为其每一数位的进制并不固定!例如说某种 X 进制数,最低数位为二进制,第二数位为十进制,第三数位为八进制,则 X进制数 321 转换为十进制数为 65 。

  现在有两个 X 进制表示的整数 A 和 B ,但是其具体每一数位的进制还不确定,只知道 A  和 B 是同一进制规则,且每一数位最高为 N 进制,最低为二进制。请你算出 A − B 的结果最小可能是多少。

请注意,你需要保证 A 和 B 在 X 进制下都是合法的,即每一数位上的数字要小于其进制。

输入格式:

第一行一个正整数N,含义如题面所述。

第二行一个正整数Ma,表示x进制数A的位数。

第三行Ma个用空格分开的整数,表示x进制数A按从高位到低位顺序各个数位上的数字在十进制下的表示。

第四行一个正整数Mb,表示x进制数B的位数。

第五行Mb个用空格分开的整数,表示x进制数B按从高位到低位顺序各个数位上的数字在十进制下的表示。

请注意,输入中的所有数字都是十进制的。

输出格式:

输出一行一个整数,表示x进制数A-B的结果的最小可能值转换为十进制后再模1000000007的结果。

样例输入:

11
3
10 4 0
3
1 2 0

样例输出:

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

const int vinf = 100010;
const int mod = 1000000007;
typedef long long ll;
int a[vinf],b[vinf];
int weights[vinf];	//单个位数上的权值 
ll ans; 

int main()
{
	/*
		例如:3 的进制为8,2的进制为10,1的进制为2
		3 2  1
		8 10 2			1 + 2 * 2 + 3 * 10 * 2 = 65
		
		10 4 0
		11 5 2			0 + 4 * 2 + 10 * 5 * 2 = 108
		当进制为:最低位 2 进制,第二数位 5 进制,第三数位 11 进制时,减法得到的差最小。
	*/
	int N;	//最大进制数
	cin>>N;
	int na,nb;
	cin>>na;
	for(int i = na;i >= 1;i--) //从高位开始输入 
		cin>>a[i];
	 
	cin>>nb;
	for(int i = nb; i >= 1;i--)
		cin>>b[i]; 
		
	//选取位数多的
	int max_num = max(na,nb);	
	//计算每一位上的权值
	for(int i = 1;i <= max_num;i++)
		weights[i] = max(max(a[i], b[i]) + 1, 2);
		
	//计算两个数字的按权展开的和
	ll A = 0, B = 0;
	for(int i = na;i >= 1;i--)
		A = (A * weights[i] + a[i]) % mod;
		
	for(int i = nb;i >= 1;i--)
		B = (B * weights[i] + b[i]) % mod;	
	
	ans = (A - B) % mod;
	
	cout<<ans<<endl;
		
	return 0;
}

试题 F: 统计子矩阵

给定一个N*M的矩阵A,请你统计有多少个子矩阵(最小1*1,最大N*M)满足子矩阵中所有数的和不超过给定的整数K?

输入格式:

第一行包含三个整数N,M和K。

之后N行每行包含M个整数,代表矩阵A。

输出格式:

一个整数代表答案。

样例输入:

3 4 10
1 2 3 4
5 6 7 8
9 10 11 12
19
#include <bits/stdc++.h>
using namespace std;

const int MAX = 501;
typedef long long ll;
int area[MAX][MAX];
ll ans = 0;

int main()
{
	int n,m,k;
	cin>>n>>m>>k;
    for(int i = 1;i <= n;i++)
    {
        for(int j = 1;j <= m;j++)
        {
            cin>>area[i][j];
            area[i][j] += area[i-1][j]; //前缀和 
        }
    }
    //滑动窗口算法
	for(int start = 1;start <= n;start++) //起始行 
	{
		for(int end = start;end <= n;end++) //最终行 
		{
			//滑动窗口的边界 
			int l = 1,r = 1,sum = 0;
			for(;r <= m;r++)
			{
				//扩大窗口 
				sum += area[end][r] - area[start - 1][r];
				while(sum > k)
				{
					//缩小窗口 
					sum -= area[end][l] - area[start - 1][l];
					//左边界右移 
					l++;
				}
				//算数 
				ans += r - l + 1;
			}
		}
	}
	
	cout<<ans<<endl;
	
	return 0;
}

试题 G: 积木画

样例输入:

3

样例输出:

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

typedef long long ll;
const int mod = 1e9+7;
const int m = 10000000;
int f[m][3];
ll n;

int main()
{
	cin.tie(0),cout.tie(0);
	ios::sync_with_stdio(false);
	//设f[i][0]表示当前拼完了前i列的方案数,
	//f[i][1]表示当前拼完了前i-1列,且第i列拼完了上面方格的方案数,
	//f[i][2]表示当前拼完了前i-1列,且当前第i列拼完了下面方格的方案数。
	f[0][0] = 1;
	cin>>n;
	
	for(int i = 1;i <= n;i++)
	{
		f[i][0] = (f[i-1][0] + f[i-1][1] + f[i-1][2]) % mod;
		if(i >= 2)
		{
			f[i][0] = (f[i][0] + f[i-2][0]) % mod;
			f[i][1] = (f[i-1][2] + f[i-2][0]) % mod;
			f[i][2] = (f[i-1][1] + f[i-2][0]) % mod;
		}
	}
	cout<<f[n][0];
	return 0;
}

试题 H: 扫雷

样例输入:

2 1
2 2 4
4 4 2
0 0 5

样例输出:

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

typedef long long ll;
const int M = 999997;
const ll Base = 1e9 + 7;
int hash[M];	//哈希值,用于维护find函数 
int num[M];	//当前位置有多少个炸弹 
int radius[M];	//当前位置的半径 
int visited[M];	//是否访问过 
int res;

//降维
ll get_key(int x,int y)
{
	return x * Base + y;
}
//哈希函数
int find(int x)
{
	int t = (x % M + M) % M;
	while(hash[t] != -1 && hash[t] != x)
	{
		t++;
		while(t == M) t = 0;
	}
	return t;
} 
//判断是否在范围内
bool judge(int x,int y,int r,int x2,int y2)
{
	int d = (x2 - x) * (x2 - x) + (y2 - y) * (y2 - y);
	return d <= r * r;
} 

void dfs(int x,int y,int r)
{
	for(int i = -r;i <= r;i++)
	{
		for(int j = -r;j <= r;j++)
		{
			int dx = x + i;
			int dy = y + j;
			int k = get_key(dx,dy);
			int t = find(k);
			while(hash[t] && judge(x,y,r,dx,dy) && !visited[t])
			{
				res += num[t];			//答案加上该点地雷个数
				visited[t] = 1;
				dfs(dx,dy,radius[t]);	//搜索下一个点
			}
		}
	}
}

int main()
{
	cin.tie(0),cout.tie(0);
	ios::sync_with_stdio(false);
	int n,m;
	cin>>n>>m;
	memset(hash,-1,sizeof hash);
	for(int i = 0;i < n;i++)
	{
		int x,y,r;
		cin>>x>>y>>r;
		int k = get_key(x,y);
		int t = find(k);
		hash[t] = k;
		num[t]++;		 //统计该点地雷数量
		radius[t] = max(r,radius[t]);	//记录该点地雷半径的最大值
	}
	for(int i = 0;i < m;i++)
	{
		int x,y,r;
		cin>>x>>y>>r;
		dfs(x,y,r);	//从每一个排雷火箭引爆点开始dfs
	}
	cout<<res;
	
	return 0;
}

试题  I: 李白打酒加强版

样例输入:

5 10

样例输出:

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

int mod = 1e9 + 7;
int dp[101][101][101];

int main()
{
	cin.tie(0),cout.tie(0);
	ios::sync_with_stdio(false);
	
	int n,m;
	cin>>n>>m;
	dp[0][0][2] = 1;
	for(int i = 0;i <= n;i++)
		for(int j = 0;j <= m;j++)
			for(int k = 0;k <= m;k++)
			{
				//遇到花
				if(j && k) dp[i][j][k] = (dp[i][j][k] + dp[i][j-1][k+1]) % mod;
				//遇到店 
				if(i && k % 2 == 0) dp[i][j][k] = (dp[i][j][k] + dp[i-1][j][k/2]) % mod;
			}
	//最后一次需要是花 
	cout<<dp[n][m-1][1];
	return 0;
}

试题 J: 砍竹子

样例输入:

6
2 1 4 2 6 7

样例输出:

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

typedef long long ll;
struct Node
{
	ll h;
	int idx;
	bool operator <(const Node &rhs) const
	{
		if(h == rhs.h) return idx > rhs.idx; //索引升序 
		return h < rhs.h; //高度降序 
	}
};
priority_queue<Node> q;
int ans;

int main()
{
	cin.tie(0),cout.tie(0);
	ios::sync_with_stdio(false);
	
	int n,h;
	cin>>n;
	for(int i = 1;i <= n;i++) 
	{
		cin>>h;
		q.push((Node){h,i});
	}
	while(!q.empty())
	{
		Node node = q.top();
		q.pop();
		
		if(node.h == 1) continue;
		while(!q.empty() && q.top().h == node.h && q.top().idx == node.idx + 1)
		{
			node.idx = q.top().idx;
			q.pop();
		}
		node.h = sqrtl(node.h / 2 + 1);
		if(node.h > 1) q.push(node);
		ans++;
	}
	cout<<ans;
	return 0;
}

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

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

相关文章

2000-2021年各省外商直接投资水平面板数据(含原始数据+计算结果)(无缺失)

2000-2021年各省外商直接投资水平面板数据&#xff08;含原始数据计算结果&#xff09;&#xff08;无缺失&#xff09; 1、时间&#xff1a;2000-2021年 2、指标&#xff1a;外商直接投资额&#xff08;万美元&#xff09;、外商直接投资额&#xff08;万元&#xff09;、国…

MySQL语法分类 DQL(4)聚合函数

为了更好的学习这里给出基本表数据用于查询操作 create table student (id int, name varchar(20), age int, sex varchar(5),address varchar(100),math int,english int );insert into student (id,name,age,sex,address,math,english) values (1,马云,55,男,杭州,66,78),…

2024年【危险化学品经营单位主要负责人】找解析及危险化学品经营单位主要负责人模拟考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 危险化学品经营单位主要负责人找解析考前必练&#xff01;安全生产模拟考试一点通每个月更新危险化学品经营单位主要负责人模拟考试题目及答案&#xff01;多做几遍&#xff0c;其实通过危险化学品经营单位主要负责人…

移动云行动:5.5G技术引领数字化转型

刚刚结束的全国两会上&#xff0c;有人大代表建议应尽快发挥5G-A&#xff08;5.5G&#xff09;优势&#xff0c;加快试点城市布局。此前&#xff0c;中国移动已宣布将在300多个城市启动5.5G商用部署。在通信技术的历史长河中&#xff0c;4G改变了我们的生活方式&#xff0c;而5…

【Poi-tl Documentation】区块对标签显示隐藏改造

前置说明&#xff1a; <dependency><groupId>com.deepoove</groupId><artifactId>poi-tl</artifactId><version>1.12.1</version> </dependency>模板&#xff1a; 删除行表格测试.docx 改造前测试效果 package run.siyuan…

Iframe 嵌入: 页面嵌入并保持自适应页面的宽高并铺满整个屏幕

文章目录 问题分析1. 嵌入 Iframe2. 样式3. 源码 问题 当我们使用 Iframe 嵌入页面后&#xff0c;会看到它只在小小的一部分进行展示&#xff0c;如何让它铺满整个屏幕 分析 1. 嵌入 Iframe <template><div><iframe :src"embeddedPageUrl" width…

【编程项目开源】微信飞机大战(鸿蒙版)

目标 仿微信飞机大战 效果 开发工具 下载DevEco Studio 工程截图 开源地址 https://gitee.com/lblbc/plane_game/tree/master/PlaneGame_hongmeng_ArkTS 关于 厦门大学计算机专业|华为八年高级工程师 专注《零基础学编程系列》 http://lblbc.cn/blog 包含&#xff1a;Ja…

18.相交链表

给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点&#xff0c;返回 null 。 图示两个链表在节点 c1 开始相交&#xff1a; 题目数据 保证 整个链式结构中不存在环。 注意&#xff0c;函数返回结果后&…

腾讯云2核4g服务器能支持多少人访问?没搞错吧

腾讯云轻量2核4G5M带宽服务器支持多少人在线访问&#xff1f;5M带宽下载速度峰值可达640KB/秒&#xff0c;阿腾云以搭建网站为例&#xff0c;假设优化后平均大小为60KB&#xff0c;则5M带宽可支撑10个用户同时在1秒内打开网站&#xff0c;并发数为10&#xff0c;经阿腾云测试&a…

2024年【P气瓶充装】模拟考试及P气瓶充装证考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 P气瓶充装模拟考试是安全生产模拟考试一点通生成的&#xff0c;P气瓶充装证模拟考试题库是根据P气瓶充装最新版教材汇编出P气瓶充装仿真模拟考试。2024年【P气瓶充装】模拟考试及P气瓶充装证考试 1、【多选题】《中华…

Java中的实用类讲解(上篇)

如果想观看更多Java内容 可上我的个人主页关注我&#xff0c;地址子逸爱编程-CSDN博客https://blog.csdn.net/a15766649633?spm1000.2115.3001.5343 使用工具 IntelliJ IDEA Community Edition 2023.1.4 使用语言 Java8 代码能力快速提升小方法&#xff0c;看完代码自己敲…

python 实现阿里云OSS文件上传

因为我们出口的带宽限制&#xff0c;测试经常找我给他上传个包到阿里云的对象存储&#xff0c;虽然传起来也不是很费事&#xff0c;但是出于运维的职业素养&#xff0c;特意写了一个自动上传的接口&#xff0c;代码如下&#xff1a; # -*- coding: UTF-8 -*- from flask imp…

【保姆及教程】简直不要太爽了!md文件图床工具picgo配合typora和阿里云oss存储,实现文md文件的复制转贴

md文件图床工具picgo的安装和使用、配合阿里云面向对象oss 一、网址 官方网址&#xff1a;https://molunerfinn.com/PicGo/ github地址&#xff1a;https://github.com/Molunerfinn/picgo/releases 选择对应的版本下载即可 但也可以提供我给你的下载的地址&#xff1a; 方…

前端学习之css选择器--基本选择器、关系选择器、属性选择器、复合选择器、伪类选择器

目录 基本选择器 结果 关系选择器 结果 父子关系 祖先后代关系 相邻兄弟关系 兄弟关系 ​编辑 属性选择器 结果 复合选择器 结果 伪类选择器 结果 伪类选择器-操作标签 结果 未访问 访问后 悬停 基本选择器 <!DOCTYPE html> <html lang"en"…

Java-PriorityQueue源码分析

PriorityQueue 源码分析 Java中的PriorityQueue采用的是堆这种数据结构来实现的,而存储堆采用的则是数组。 堆是一个完全二叉树,堆中每一个节点的值都必须大于等于(或小于等于)其子树中每个节点的值,对于每个节点的值都大于等于子树中每个节点值的堆&#xff0c;我们叫做大顶…

数学建模--MATLAB基本使用

1.线性方程组 这个是一个线性方程组&#xff08;属于线性代数的范畴&#xff09;&#xff0c;Axb类型的方程&#xff0c;如果使用MATLAB进行求解&#xff0c;就需要分别表示A矩阵&#xff08;线性方程组未知数前面的系数&#xff09;&#xff0c;b矩阵&#xff08;表示等式右边…

探索Docker:原理、安装与基础应用

进程: 一旦“程序”被执行起来&#xff0c;它就从磁盘上的二进制文件&#xff0c;变成了计算机内存中的数据、寄存器里的值、堆栈中的指令、被打开的文件&#xff0c;以及各种设备的状态信息的一个集合。像这样一个程序运行起来后的计算机执行环境的总和称为进程 静态表现&am…

数据结构:基于数组实现简单的数据缓存区(简单队列)

1 前言 在我们使用CAN或者以太网调试时&#xff0c;经常需要缓存最近n次收到的数据&#xff0c;以便于我们对数据进行分析。 实现这一想法我们很容易就会想到队列&#xff0c;队列就是一种先进先出的数据结构&#xff0c;之前在《数据结构&#xff1a;基于数组的环形队列&…

win10 + cpu + pycharm + mindspore

MindSpore是华为公司自研的最佳匹配昇腾AI处理器算力的全场景深度学习框架。 1、打开官网&#xff1a; MindSpore官网 2、选择以下选项&#xff1a; 3、创建conda 环境&#xff0c;这里python 选择3.9.0&#xff0c;也可以选择其他版本&#xff1a; conda create -c conda-…

xray问题排查,curl: (35) Encountered end of file(已解决)

经过了好几次排查&#xff0c;都没找到问题&#xff0c;先说问题的排查过程&#xff0c;多次确认了user信息&#xff0c;包括用户id和alterid&#xff0c;都没问题&#xff0c;头大的一逼 问题排查过程 确保本地的xray服务是正常的 [rootk8s-master01 xray]# systemctl stat…