不像人做的题————十四届蓝桥杯省赛真题解析(上)A,B,C,D题解析

news2025/3/17 16:01:38

题目A:日期统计

在这里插入图片描述
思路分析:
本题的题目比较繁琐,我们采用暴力加DFS剪枝的方式去做,我们在DFS中按照8位日期的每一个位的要求进行初步剪枝找出所有的八位子串,但是还是会存在19月的情况,为此还需要在CHECK函数中进一步剪枝,使得月份天数都符合条件
作者题解:

#include<iostream>
using namespace std;
int a[105], ans;
bool vis[20240000];
bool check(int date)//进一步剪枝,判断日期是否合法
{
	if (vis[date])return false;
	vis[date] = 1;//标记是否访问过
	int mm = date / 100 % 100;//取出月份判断是否合法
	int dd = date % 100;//取出天数判断是否合法
	if (mm < 1 || mm > 12)return false;//月份小于1大于12都不合法
	if (mm == 1 || mm == 3 || mm == 5 || mm == 7 || mm == 8 || mm == 10 || mm == 12)
	{
		if (1 <= dd && dd <= 31)return true;//大月如果是31天表示合法
	}
	else if (mm == 2)
	{
		if (1 <= dd && dd <= 28)return true;//如果是2月不超过28天表示合法
	}
	else if (1 <= dd && dd <= 30)return true;//不是2月也不是大月不超过30天表示合法
	else return false;
}

void dfs(int x, int pos, int date)
{
	if (x == 100)return;
	if (pos == 8)
	{
		if (check(date))++ans;
		return;
	}
	if (pos == 0 && a[x] == 2 ||
		pos == 1 && a[x] == 0 ||
		pos == 2 && a[x] == 2 ||
		pos == 3 && a[x] == 3 ||//剪枝,前四位必须是2023
		pos == 4 && (0 <= a[x] && a[x] <= 1) || //剪枝,月份第一位不可能超过1
		pos == 5 && (0 <= a[x] && a[x] <= 9) ||
		pos == 6 && (0 <= a[x] && a[x] <= 3) ||//日期的第一位不可能超过3
		pos == 7 && (0 <= a[x] && a[x] <= 9))
		dfs(x + 1, pos + 1, date * 10 + a[x]);
	dfs(x + 1, pos, date);//合法才继续往后搜索
}
int main()
{
	ios::sync_with_stdio,cin.tie(0), cout.tie(0);
	for (int i = 0; i < 100; i++)cin >> a[i];
	dfs(0, 0, 0);
	cout << ans;
	return 0;
}

运行结果:
在这里插入图片描述
有235个这样的合法子序列

题目B:01串的熵

在这里插入图片描述
思路分析:
这道题我们不要被它的定义吓唬住,仔细分析我们设串中的1的个数为u,串长为N,则v的个数为N-u,我们可以得到如下图的递推公式:

在这里插入图片描述
然后就是由于题中给出的是浮点数,我们要考率精度的问题,误差在给定的范围内即可认为是同一个浮点数,给定的数有几位小数,我们的精度就设为10的几次方

作者题解:

#include<iostream>
using namespace std;
using db = long double;
const int N = 23333333;//定义字符串长度
const db ans = 11625907.5798, eps = 1e-4;//由于题目中的数据是四位小数,所以我们要定义一个误差精度eps,在误差内表示是同一个数
int main()
{
	for (int v = 0; v <= N / 2; ++v)
	{
		int u = N - v;
		db res = -1.0 * u * u / N * log2(1.0 * u / N) - 1.0 * v * v / N * log2(1.0 * v / N);
		if (fabs(res - ans) < eps)
		{
			cout << v;
			return 0;
		}
	}
	return 0;
}

运行结果:
在这里插入图片描述

题目C:冶炼金属

在这里插入图片描述
在这里插入图片描述
思路分析:
在这里插入图片描述
如图所示,我们通过数轴的方式分析,Ai/Vmin=Bi,那么我们如果要找Vmin那么Vmin逐渐增大,对应的Bi会逐渐变小,也就是说,Vmin左侧的Bi应该都比Vmin的Bi大,同理,Vmax右侧的Bi应该都比Vmax的Bi小,所以我们使用两次二分法,二分答案,以Bi的值作为检验函数,就可以求出最大和最小的V
作者题解:

#include<iostream>
using namespace std;
const int MAX_N = 1e4 + 1;
int N, A[MAX_N], B[MAX_N];
int V_min,V_max;
bool check_min(int V)
{
	for (int i = 1; i <= N; ++i)
		if (A[i] / V > B[i])return false;//查找最小值时都应该比bi小
	return true;
}

bool check_max(int V)
{
	for (int i = 1; i <= N; ++i)
		if (A[i] / V < B[i])return false;//查找最大值时都应该比bi小
	return true;
}
int main()
{
	ios::sync_with_stdio, cin.tie(0), cout.tie(0);
	cin >> N;
	for (int i = 1; i <= N; i++)cin >> A[i] >> B[i];
	int L = 1, R = 1e9;
	while (L <= R)
	{
		int mid = L + R >> 1;
		if (check_min(mid))
		{
			V_min = mid;
			R = mid - 1;//查找最小值缩右边界
		}
		else L = mid + 1;
	}

	 L = 1, R = 1e9;
	while (L <= R)
	{
		int mid = L + R >> 1;
		if (check_max(mid))
		{
			V_max = mid;
			L = mid + 1;//查找最大值缩左边界
		}
		else R = mid - 1;
	}
	cout << V_min << " " << V_max << endl;
	return 0;
}

运行结果:
在这里插入图片描述
在这里插入图片描述

题目D:飞机降落

在这里插入图片描述
在这里插入图片描述
思路分析:
这道题如果我们直接采用全排列可能会超时,所以我们还是采用DFS剪枝的策略,核心思想在于该架飞机的到达时间加上盘旋时间大于此前所有飞机的降落时间时才可以安全降落,我们采用一个used数组来维护飞机是否可以安全降落,最后递归的出口如果X==N即所有飞机完成降落我们就输出YES
作者题解:

#include<iostream>
using namespace std;
const int MAX_N = 11;
int N, T[MAX_N], D[MAX_N], L[MAX_N];
bool used[MAX_N], have_answer;//use标志飞机是否安全降落
void dfs(int x, int tim) //tim表示此前所有飞机降落所需的单位时间
{
	if (have_answer)return;
	if (x == N)
	{
		have_answer = 1;
		return;//存在解则退出搜索
	}
	for (int i = 1; i <= N; i++)
	{
		if (!used[i] && tim <= T[i] + D[i])
		{
			used[i] = 1;
			dfs(x + 1, max(T[i], tim) + L[i]);//如果此前所有的飞机的降落时间小于下一架飞机的最早降落时间可以等一等
			if (have_answer)return;
			else used[i] = 0;//回溯
		}
	}
}

void solve()
{
	have_answer = 0;
	cin >> N;
	for (int i = 1; i <= N; ++i)
	{
		cin >> T[i] >> D[i] >> L[i];
		used[i] = 0;
	}
	dfs(0, 0);
	if (have_answer)cout << "YES\n";
	else cout << "NO\n";
}
int main()
{
	ios::sync_with_stdio, cin.tie(0), cout.tie(0);
	int t;
	cin >> t;
	while (t--)
		solve();
	return 0;
}

运行结果:

在这里插入图片描述
在这里插入图片描述
下期预告:E,F,G题解析

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

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

相关文章

JavaScript 中 call 和 apply 的用法与区别

文章目录 前言一、 call 方法1.1 基本用法1.2 传递多个参数 二、apply 方法2.1 基本用法2.2 传递数组参数 三、call 和 apply 的区别四、实际应用场景4.1 借用方法4.2 继承与构造函数 五、总结 前言 在 JavaScript 中&#xff0c;call 和 apply 是两个非常重要的函数方法&…

面试系列|蚂蚁金服技术面【1】

哈喽&#xff0c;大家好&#xff01;今天分享一下蚂蚁金服的 Java 后端开发岗位真实社招面经&#xff0c;复盘面试过程中踩过的坑&#xff0c;整理面试过程中提到的知识点&#xff0c;希望能给正在准备面试的你一些参考和启发&#xff0c;希望对你有帮助&#xff0c;愿你能够获…

使用傅里叶变换测量声卡的频率失真

文章目录 一、说明二、关于声卡的技术详述三、实验代码获取四、结论 一、说明 假如我希望使用我的声卡来模拟软件无线电&#xff0c;利用声音而不是射频信号。我的声卡能胜任这项任务吗&#xff1f;本文将研究一种技术来找出答案。另外&#xff0c;需要了解音频技术的读者也可…

【HTML5】01-HTML摆放内容

本文介绍HTML5摆放标签的知识点。 目录 1. HTML概念 2. HTML骨架 3. 标签的关系 4. 标题标签 5. 段落标签 6. 换行和水平线 7. 文本格式化标签 8. 图像标签 图像 - 属性 9. 路径 相对路径 绝对路径 10. 超链接标签 11. 音频标签 12. 视频标签 1. HTML概念 HTM…

内存管理:

我们今天来学习一下内存管理&#xff1a; 1. 内存分布&#xff1a; 我们先来看一下我们下面的图片&#xff1a; 这个就是我们的内存&#xff0c;我们的内存分为栈区&#xff0c;堆区&#xff0c;静态区&#xff0c;常量区&#xff1b; 我们的函数栈帧开辟消耗的内存就是我们…

设计模式使用Java案例

代码设计要有可维护性&#xff0c;可复用性&#xff0c;可扩展性&#xff0c;灵活性&#xff0c;所有要使用设计模式进行灵活设计代码 创建型 简单工厂模式&#xff08;Simple Factory&#xff09; 简单工厂模式&#xff08;Simple Factory Pattern&#xff09;是一种创建型…

模运算的艺术:从基础到高阶的算法竞赛应用

在算法竞赛中&#xff0c;模运算&#xff08;取模运算&#xff09;是一个非常重要的概念&#xff0c;尤其在处理大数、防止溢出、以及解决与周期性相关的问题时。C 中的模运算使用 % 运算符&#xff0c;但它的行为和使用场景需要特别注意。 1. 模运算的基本概念 模运算是指求一…

ST电机库电流采样 三电阻单ADC

一、概述 下图是三电阻采样的电路结构 其中流过三相系统的电流I1、I2、I3遵循以下关系: 因此,为了重建流过普通三相负载的电流,在我们可以用以上公式计算的情况下,只需要对三相中的两相进行采样即可。 STM32的ADC可以很灵活的配置成同步采集两路ADC数据,…

现代密码学 | 具有保密和认证功能的安全方案

1.案例背景 1.1 2023年6月&#xff0c;微软云电子邮件泄露 事件描述&#xff1a; 2023年6月&#xff0c;属于多家美国政府机构的微软云电子邮件账户遭到非法入侵&#xff0c;其中包括了多位高级政府官员的电子邮件。据报道&#xff0c;美国国务院的10个邮件账户中共有6万封电…

一款基于Python的从常规文档里提取图片的简单工具开发方案

一款基于Python的从常规文档里提取图片的简单工具开发方案 1. 环境准备 安装必需库 pip install python-docx PyMuPDF openpyxl beautifulsoup4 pillow pip install pdfplumber # PDF解析备用方案 pip install tk # Python自带&#xff0c;无需安装工具选择 开发环…

JetBrains(全家桶: IDEA、WebStorm、GoLand、PyCharm) 2024.3+ 2025 版免费体验方案

JetBrains&#xff08;全家桶: IDEA、WebStorm、GoLand、PyCharm&#xff09; 2024.3 2025 版免费体验方案 前言 JetBrains IDE 是许多开发者的主力工具&#xff0c;但从 2024.02 版本起&#xff0c;JetBrains 调整了试用政策&#xff0c;新用户不再享有默认的 30 天免费试用…

Docker生存手册:安装到服务一本通

文章目录 一. Docker 容器介绍1.1 什么是Docker容器&#xff1f;1.2 为什么需要Docker容器&#xff1f;1.3 Docker架构1.4 Docker 相关概念1.5 Docker特点 二. Docker 安装2.1 查看Linux内核版本2.2 卸载老版本docker&#xff0c;避免产生影响2.3 升级yum 和配置源2.4 安装Dock…

Linux内核传输层UDP源码分析

一、用户数据包协议&#xff08;UDP&#xff09; 1.UDP数据报头 UDP 提供面向消息的不可靠传输&#xff0c;但没有拥塞控制功能。很多协议都使用 UDP&#xff0c;如用于 IP 网络传输音频和视频的实时传输协议 (Real-time Transport Protocol&#xff0c;RTP)&#xff0c;此类型…

FPGA学习(二)——实现LED流水灯

FPGA学习(二)——实现LED流水灯 目录 FPGA学习(二)——实现LED流水灯一、DE2-115时钟源二、控制6个LED灯实现流水灯1、核心逻辑2、代码实现3、引脚配置4、实现效果 三、模块化代码1、分频模块2、复位暂停模块3、顶层模块 四、总结 一、DE2-115时钟源 DE2-115板子包含一个50MHz…

Linux如何在设备树中表示和引用设备信息

DTS基本知识 dts 硬件的相应信息都会写在.dts为后缀的文件中&#xff0c;每一款硬件可以单独写一份xxxx.dts&#xff0c;一般在Linux源码中存在大量的dts文件&#xff0c;对于arm架构可以在arch/arm/boot/dts找到相应的dts&#xff0c;一个dts文件对应一个ARM的machie。 dtsi 值…

Matlab 汽车振动多自由度非线性悬挂系统和参数研究

1、内容简介 略 Matlab 169-汽车振动多自由度非线性悬挂系统和参数研究 可以交流、咨询、答疑 2、内容说明 略 第二章 汽车模型建立 2.1 汽车悬架系统概述 2.1.1 悬架系统的结构和功能 2.1.2 悬架分类 2.2 四分之一车辆模型 对于车辆动力学&#xff0c;一般都是研究其悬…

生活中的可靠性小案例11:窗户把手断裂

窗户把手又断了&#xff0c;之前也断过一次&#xff0c;使用次数并没有特别多。上方的图是正常的把手状态&#xff0c;断的形状如下方图所示。 这种悬臂梁结构&#xff0c;没有一个良好的圆角过渡&#xff0c;导致应力集中。窗户的开关&#xff0c;对应的是把手的推拉&#xff…

[oeasy]python074_ai辅助编程_水果程序_fruits_apple_banana_加法_python之禅

074_ai辅助编程_水果程序_fruits_加法 回忆上次内容 上次直接从模块中导入变量、函数 from my_file import pi 导入my_file.pi 并作为 pi 使用 from my_file import pi as my_pi 导入变量 并 重命名 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; …

【图论】并查集的学习和使用

目录 并查集是什么&#xff1f; 举个例子 组成 父亲数组&#xff1a; find函数&#xff1a; union函数&#xff1a; 代码实现&#xff1a; fa[] 初始化code: find code&#xff1a; 递归实现: 非递归实现: union code : 画图模拟&#xff1a; 路径压缩&#xff1a…

欢乐力扣:反转链表

文章目录 1、题目描述2、思路 1、题目描述 反转链表。  给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 2、思路 借助cur指针和pre双指针来调整链表的前后指向。 # Definition for singly-linked list. # class ListNode: # def __i…