首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【蓝桥杯】第十三届C++B组省赛

【蓝桥杯】第十三届C++B组省赛

作者头像
_小羊_
发布于 2025-03-17 05:34:39
发布于 2025-03-17 05:34:39
7700
代码可运行
举报
文章被收录于专栏:C++C++
运行总次数:0
代码可运行

试题A:九进制转十进制

在这里插入图片描述
在这里插入图片描述

这题我们直接手算最快,当然写代码也用不了多少时间。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <bits/stdc++.h>
using namespace std;

int main()
{
	int n = 2022;
	int ret = 0, m = 1;
	while (n)
	{
		ret += (n % 10) * m;
		m *= 9;
		n /= 10;
	}
	cout << ret << endl;
	return 0;
}

任意进制转10进制:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <bits/stdc++.h>
using namespace std;

int func(int x, int y)
{
	int ret = 0, i = 0;
	while (x)
	{
		ret += (x % 10) * pow(y, i); 
		x /= 10;
		i++;
	}
	return ret;
}

int main()
{
	int n, m;
	cin >> n >> m;
	cout << func(n, m) << endl;
	return 0;
}

如2022的9进制:


试题B:顺子日期

根据我们对日期的了解,要有顺子出现则只可能有 012123 这两种,而且年份2022也不用考虑,所以我们可以遍历2022年每一天的日期然后删选统计。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <bits/stdc++.h>
using namespace std;

bool check(int mouth, int day)
{
	string s;
	if (mouth < 10) s += '0';
	s += to_string(mouth);
	if (day < 10) s += '0';
	s += to_string(day);
	return (s.find("012") != string::npos) || (s.find("123") != string::npos);
}

int main()
{
	int count = 0;
	int day[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
	for (int i = 1; i <= 12; i++)
		for (int j = 1; j <= day[i]; j++)
			if (check(i, j)) count++;
	cout << count << endl;
	return 0;
}

试题C:刷题统计

  • 注意题中给定的数据范围,很明显要开 long long
  • 一天一天枚举只能通过部分样例,需要做一个小优化,很容易的能想到先计算出需要的整的周数,然后再枚举剩下的天数。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <bits/stdc++.h>
using namespace std;

using ll = long long;

int main()
{
	ll a, b, n, num, week, day;
	cin >> a >> b >> n;
	num = 5 * a + 2 * b; // 一周做num道题 
	week = n / num; // 整的周数
	day = n - (week * num); // 还需要做多少题
	int count = 0;
	for (int i = 1; i <= 7 && day > 0; i++)
	{
		count++;
		if (i <= 5) day -= a;
		else day -= b;
	} 
	cout << week * 7 + count << endl;
	return 0;
}

试题D:修剪灌木

  • 这道题需要多思考,多画图,就能找到其中的关键所在;
  • 爱丽丝向左或向右经过第 i 棵树,到左端点或右端点后折返回来的这几天, 是第 i 棵树能长到最大高度的时机;
  • 可以看作是爱丽丝没走一步第 i 棵树就长高 1cm,那就转而变为求爱丽丝下次经过第 i 棵树最大需要走多少步
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <bits/stdc++.h>
using namespace std;

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

试题E:X 进制减法

试题F:统计子矩阵

我们枚举所有子矩阵的上角和右下角,就能统计出所有子矩阵的和。但是四层循环会超出时间限制,只能拿到70%的分数。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <bits/stdc++.h>
using namespace std;

using ll = long long;
int arr[510][510];
int dp[510][510];

int main()
{
	int n, m, ret = 0;
	ll k;
	cin >> n >> m >> k;
	for (int i = 1; i <= n; i++)
	{
		for (int j = 1; j <= m; j++)
		{
			cin >> arr[i][j];
			dp[i][j] = dp[i][j - 1] + dp[i - 1][j] - dp[i - 1][j - 1] + arr[i][j];
		}
	}
	for (int i = 1; i <= n; i++)
	{
		for (int j = 1; j <= m; j++)
		{
			for (int x = i; x <= n; x++)
			{
				for (int y = j; y <= m; y++)
				{
					if ((dp[x][y] - dp[x][j - 1] - dp[i - 1][y] + dp[i - 1][j - 1]) <= k) ret++;
				}
			}
		 } 
	}
	cout << ret << endl;
	return 0;	
}

可以用滑动窗口做优化,先固定一个上边界 i,再固定一个下边界 j,然后让 r 指针右移,当四条边界围成的矩阵和大于 k 时让 l 指针右移,当刚好子矩阵之和不超过 k 时,此时 l 和 r 之间的所有子矩阵之和都不超过 k。

注意遍历过程中的数据范围,不要造成重复遍历。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <bits/stdc++.h>
using namespace std;

using ll = long long;
ll dp[510][510];
ll n, m, k;

int main()
{
	ll ret = 0;
	cin >> n >> m >> k;
	for (int i = 1; i <= n; i++)
	{
		for (int j = 1; j <= m; j++)
		{
			int tmp;
			cin >> tmp;
			dp[i][j] = dp[i][j - 1] + dp[i - 1][j] - dp[i - 1][j - 1] + tmp;
		}
	}
	for (int i = 1; i <= n; i++)
	{
		for (int j = i; j <= n; j++)
		{
			for (int l = 1, r = 1; r <= m; r++)
			{
				while (l <= r && dp[j][r] - dp[j][l - 1] - dp[i - 1][r] + dp[i - 1][l - 1] > k) l++;
				if (l <= r) ret += r - l + 1;
			}
		}
	}
	cout << ret << endl;
	return 0;
}

试题G:积木画

在这里插入图片描述
在这里插入图片描述

我们以第 i 个位置向前推理:

可以发现,对于第 i 个位置只有一种拼法;对于第 i-1 个位置也只有一种拼法(不能竖着拼,这样就和前面重复了);对于第 i-2 个位置就有两种拼法;同样的对于第 i-3、i-4 等等都是两种拼法。

那我们就可以写出状态转移方程:dp[i] = dp[i-1] + dp[i-2] + 2 * dp[i-3] + 2 * dp[i-4] + ... + 2 * dp[1]。 然后我们可以用高中常用的方法变化上面的式子得到 dp[i-1] = dp[i-2] + dp[i-3] + 2 * dp[i-4] + ... + 2 * dp[1],两式相减得:dp[i] = 2 * dp[i-1] + dp[i-3]

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <bits/stdc++.h>
using namespace std;

const int N = 1e7 + 1;
using ll = long long;
ll dp[N], mod = 1e9 + 7;

int main()
{
	int n;
	cin >> n;
	dp[1] = 1;
	dp[2] = 2;
	dp[3] = 5;
	for (int i = 4; i <= n; i++)
		dp[i] = ((2 * dp[i - 1]) % mod + dp[i - 3]) % mod;
	cout << dp[n] << endl;
	return 0;
}

试题H:扫雷


试题I:李白打酒加强版

在这里插入图片描述
在这里插入图片描述
  • 一般求合法的个数、顺序、排列、方案等且范围不是很大,大概率是用动态规划做。

本题的关键所在是:最后一次遇到花,且酒恰好喝完。

动态规划的两大要素:状态和转移。 状态:题中共有三个状态:店、花、酒。所以设 dp[i][j][k] 表示经过i家店,j朵花,壶里还有k斗酒的方案数。 转移:假设李白的壶中此时有k斗酒,则此时的状态 dp[i][j][k] 可以由 dp[i-1][j][k/2] (上一次遇到的是店,但是需要注意此时的k必须是偶数,因为此时的k是由上一次遇到店翻倍而来)和 dp[i][j-1][k+1] (上一次遇到的是花)转移而来。

最后返回 dp[n][m-1][1],因为要保证最后一次遇到的是花,且酒恰好还剩一斗。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <bits/stdc++.h>
using namespace std;

const int mod = 1e9 + 7;
// dp[i][j][k]表示经过i家店,j朵花,壶里还有k斗酒的方案总数 
int dp[110][110][110];

int main()
{
	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 (k % 2 == 0 && i > 0)
				{
					dp[i][j][k] += (dp[i - 1][j][k / 2]) % mod; 
				}
				if (j > 0)
				{
					dp[i][j][k] += (dp[i][j - 1][k + 1]) % mod;
				}
			}
		}
	}
	cout << dp[n][m - 1][1] << endl;
	return 0;
 }

试题J:砍竹子

本题的关键是:如果当前的竹子高度在变化的过程中,某次高度在前面的竹子高度变化过程中出现过,那么这棵竹子就不用再砍了,因为可以和前面的竹子一起砍。对于后面的竹子也是一样,只要高度降低到在前面竹子高度变化中有出现,就点到为止,然后把当前竹子的所有变化记录下来,开始砍下一棵竹子。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <bits/stdc++.h>
using namespace std;

const int N = 2e5 + 1;
using ll = long long;
ll n, ret, sz;
ll arr[N], f[100];

int main()
{
	cin >> n;
	for (int i = 0; i < n; i++) cin >> arr[i];
	while (arr[0] > 1)
	{
		ret++;
		f[sz++] = arr[0];
		arr[0] = floor(sqrt(floor(arr[0] / 2.0) + 1));
	}
	for (int i = 1; i < n; i++)
	{
		ll t = arr[i];
		while (t > 1)
		{
			int flag = 0;
			for (int i = 0; i < sz; i++)
			{
				if (f[i] == t) 
				{
					flag = 1;
					break;
				}
			}
			if (flag == 1) break;
			ret++;
			t = floor(sqrt(floor(t / 2.0) + 1));
		}
		sz = 0;
		while (arr[i] > 1)
		{
			f[sz++] = arr[i];
			arr[i] = floor(sqrt(floor(arr[i] / 2.0) + 1));
		}
	}
	cout << ret << endl;
	return 0;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-03-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
捣鼓半天,总算搞懂了 IntelliJ IDEA 中如何部署 Web 项目
IDEA 中最重要的各种设置项,就是这个 Project Structre 了,关乎你的项目运行,缺胳膊少腿都不行。
江南一点雨
2019/11/14
1.8K0
【Tomcat】《How Tomcat Works》英文版GPT翻译(第八章)
You have seen a simple loader implementation in the previous chapters, which was used for loading servlet classes. This chapter explains the standard web application loader, or loader for short, in Catalina. A servlet container needs a customized loader and cannot simply use the system's class loader because it should not trust the servlets it is running. If it were to load all servlets and other classes needed by the servlets using the system's class loader, as we did in the previous chapters, then a servlet would be able to access any class and library included in the CLASSPATH environment variable of the running Java Virtual Machine (JVM), This would be a breach of security. A servlet is only allowed to load classes in the WEB-INF/classes directory and its subdirectories and from the libraries deployed into the WEB-INF/lib directory. That's why a servlet container requires a loader of its own. Each web application (context) in a servlet container has its own loader. A loader employs a class loader that applies certain rules to loading classes. In Catalina, a loader is represented by the org.apache.catalina.Loader interface.
阿东
2024/01/13
1780
【Tomcat】《How Tomcat Works》英文版GPT翻译(第八章)
IDEA 中的热部署神器!
在 Java Web 开发中, 一般更新了 Java 文件后要手动重启 Tomcat 服务器, 才能生效, 浪费不少生命啊, 自从有了 JRebel 这神器的出现, 不论是更新 class 类还是更新 Spring 配置文件都能做到立马生效,大大提高开发效率。
逆锋起笔
2021/07/19
8870
理解 IntelliJ IDEA 的项目配置和Web部署
IDEA 中最重要的各种设置项,就是这个 Project Structre 了,关乎你的项目运行,缺胳膊少腿都不行。最近公司正好也是用之前自己比较熟悉的IDEA而不是Eclipse,为了更深入理解和使用,就找来各种资料再研究一下,这里整理后来个输出。
用户1518699
2018/09/12
2K0
理解 IntelliJ IDEA 的项目配置和Web部署
IDEA使用JRebel热部署项目
作为后端开发人员,和前端联调是一个困难的活。由于家中电脑的开发环境没有公司的办公环境配置全面,项目启动后,改了代码只能重启项目。于是我想到了JRebel,由于其中遇到了一些问题,所以这里做一个记录。
飞翔的竹蜻蜓
2020/07/08
1.8K0
IDEA使用JRebel热部署项目
在 IDEA 中用了热部署神器 JRebel 之后,开发效率大大提升!
来源:github.com/judasn/IntelliJ-IDEA-Tutorial
猿天地
2021/03/12
1.9K0
在 IDEA 中用了热部署神器 JRebel 之后,开发效率大大提升!
Intellij IDEA 14.x 中的Facets和Artifacts的区别
from:http://blog.snsgou.com/post-306.html
bear_fish
2018/09/19
1.3K0
idea创建SpringMVC项目 (1)
2.左侧选择Maven,勾选Create from archetype,选择3,next
桑鱼
2020/03/18
1.6K0
idea创建SpringMVC项目 (1)
IntelliJ IDEA2017 + tomcat 即改即生效 实现热部署
2.点击deployment查看Deploy at the server startup 中tomcat每次所运行的包是 xxxx:war 还是其他,如果是xxxx:war包,请更换.点击旁边绿色加号,选择 xxxx:war exploded ,然后将 xxxx:war 点击红色删除掉
試毅-思伟
2018/09/06
7750
IntelliJ IDEA2017 + tomcat 即改即生效 实现热部署
【软件】Intellij IDEA 导入maven web项目并部署到Tomcat
本文中所使用的IDEA版本为14.1.1, 所使用测试项目为sping mvc的一个最简单的示例, 可以在这里下载示例代码
零式的天空
2022/03/22
2.7K0
理解 IntelliJ IDEA 的项目配置和 Web 部署
IDEA 中最重要的各种设置项,就是这个 Project Structre 了,关乎你的项目运行,缺胳膊少腿都不行。最近公司正好也是用之前自己比较熟悉的IDEA而不是Eclipse,为了更深入理解和使用,就找来各种资料再研究一下,这里整理后来个输出。
芋道源码
2019/11/15
1.5K0
理解 IntelliJ IDEA 的项目配置和 Web 部署
IDEA 热部署——Tomcat
chao超的搬运文章
2023/10/15
8390
IDEA 热部署——Tomcat
Tomcat下载安装并部署到IDEA的教程(附带idea两种热部署设置方法)
使用Idea的时候,修改了代码,需要反复的重启Tomcat,查看效果,是不是贼烦?还记得刚上手idea的时候,瞎配置部署Tomcat,结果最后修改一个jsp都要重新启动服务器,我这金牛座程序员能忍?~这个时候就必须砸电脑了~这个时候就可以在项目中加入热部署,这样才会大大节省开发效率!
全栈程序员站长
2022/07/20
6110
Tomcat下载安装并部署到IDEA的教程(附带idea两种热部署设置方法)
Tomcat 的使用及原理分析(IDEA版)
之前我们的角色是用户,将来我们的角色内容提供者,让别人通过浏览器来访问我们写的项目。
wsuo
2020/07/31
1.6K0
Tomcat 的使用及原理分析(IDEA版)
IDEA配置Tomcat服务器并创建Java Web项目
一:创建Web项目 Step-one:创建Web项目 File->new Project Step-two:在WEB-INF目录下创建classes和lib目录 new -> Directory S
AlicFeng
2018/06/08
2.2K0
IDEA中每天都在用的Project Structure,你了解多少?
Idea这款开发工具的便利之一是很多配置项几乎可直接使用默认项。但针对不同的项目难免需要针对性的配置,本文带大家详细的梳理一遍Project Structure中各项功能,注意收藏,以备不时之需。
程序新视界
2020/10/28
2.9K0
IDEA中每天都在用的Project Structure,你了解多少?
Tomcat 部署详解
前篇大概讲过了tomcat的发布和部署,以及测试。 本篇详细介绍下tomcat的部署相关的内容,本篇主要内容: 1 介绍下部署相关的内容,需要安装的文件以及上下文描述符 2 静态部署——在tomcat启动时部署 3 动态部署——在运行时自动部署 4 使用TCD完成部署,另外还可以对应用进行编译、校验、打包等功能。 其他内容参考:tomcat官方文档翻译 介绍   部署就是把web应用开发时的文件拷贝到tomcat容器中,并对其进行编译等操作,使用户可以访问到该应用。在tomcat中有多种部
用户1154259
2018/01/17
1.9K0
Tomcat 部署详解
idea部署Tomcat_超乳详细
创建好后的项目结构如上图,我创建的项目名称为tomcat,这个项目现在还是一个普通的java项目,想要开发web程序,我们还要做一下操作,首先我们先给项目添加依赖
全栈程序员站长
2022/11/02
7280
IDEA/Tomcat 原理:如何将 Tomcat 集成到 IDEA?实现由传统部署延伸到热部署 Java EE 项目?
通过对 IDEA/Tomcat 原理的讲解,对比其不同之处,讲解如何将 Tomcat 集成到 IDEA 中,创建并部署 Java EE 项目。由传统的部署方式延伸到热部署 Java EE 项目,可以极大地提高项目开发的效率,方便新手入门。
白鹿第一帅
2022/05/08
1K0
IDEA/Tomcat 原理:如何将 Tomcat 集成到 IDEA?实现由传统部署延伸到热部署 Java EE 项目?
JavaWeb day5 Tomcat配置及用idea创建Maven-Tomcat项目
Web服务器是一个应用程序(软件),对HTTP协议的操作进行封装,使得程序员不必直接对协议进行操作,让Web开发更加便捷。主要功能是"提供网上信息浏览服务"。
小小程序员
2023/02/24
8620
JavaWeb day5 Tomcat配置及用idea创建Maven-Tomcat项目
推荐阅读
相关推荐
捣鼓半天,总算搞懂了 IntelliJ IDEA 中如何部署 Web 项目
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验