题山采玉: Day1

article/2025/6/8 0:24:10

嘿,各位技术潮人!好久不见甚是想念。生活就像一场奇妙冒险,而编程就是那把超酷的万能钥匙。此刻,阳光洒在键盘上,灵感在指尖跳跃,让我们抛开一切束缚,给平淡日子加点料,注入满满的passion。准备好和我一起冲进代码的奇幻宇宙了吗?Let's go!

我的博客:yuanManGan

我的专栏:C++入门小馆 C言雅韵集 数据结构漫游记  闲言碎语小记坊 题山采玉 领略算法真谛

从今天开始每天写四道题的题解,望大佬监督!

Day1

P1029 [NOIP 2001 普及组] 最大公约数和最小公倍数问题 - 洛谷

P1514 [NOIP 2010 提高组] 引水入城 - 洛谷

P6033 [NOIP 2004 提高组] 合并果子 加强版 - 洛谷

P1195 口袋的天空 - 洛谷

P1029 [NOIP 2001 普及组] 最大公约数和最小公倍数问题

我们之前了解到lcm(x,y) * gcd(x,y) = x * y

lcm和gcd我们都知道了,我们仅需枚举x推导出y即可,但x * y 为1e10时间开销太大了,我们枚举的时候 比如案例中3,60我们枚举了3,60自然会想出60和3,我们仅仅需要枚举到x*y开根号,我们还得处理一下特殊情况,两个因数相同的时候就只加一

代码:

#include <iostream>
using namespace std;typedef long long LL;LL gcd(LL a, LL b)
{return b == 0 ? a : gcd(b, a % b);
}
int main()
{LL x, y; cin >> x >> y;LL t = x * y; LL cnt = 0;for(LL p = 1; p <= t/ p; p++){if(t % p) continue;LL q = t / p;if(gcd(p, q) == x) {cnt += 2;if(p == q) cnt--;}}cout << cnt << endl;return 0;
}

P1195 口袋的天空

题目要求把每个单独的棉花糖连城k个连通块,就是经典的最小生成树问题,只不过我们不连同完即可。 并查集加kk算法,如果cnt < n-k说明连同不了k个。

#include <iostream>
#include <algorithm>using namespace std;
typedef long long LL;
int n, m, k;
const int M = 1e4 + 10, N = 1e3 + 10;
struct node
{int a, b, c;
}e[M];
int fa[N];
bool cmp(node& x, node& y)
{return x.c < y.c;
}
int find(int x)
{return fa[x] == x ? x : find(fa[x]);
}
void kk()
{sort(e + 1, e + 1 + m, cmp);for (int i = 1; i <= n; i++) fa[i] = i;LL ret = 0;int cnt = 0;for (int i = 1; i <= m; i++){int x = e[i].a, y = e[i].b, l = e[i].c;int fx = find(x), fy = find(y);if (fx == fy) continue;cnt++;ret += l;fa[fx] = fy;if (cnt == n - k) break;}if (cnt == n - k) cout << ret << endl;else cout << "No Answer" << endl;
}
int main()
{cin >> n >> m >> k;for (int i = 1; i <= m; i++)cin >> e[i].a >> e[i].b >> e[i].c;kk();return 0;
}

P6033 [NOIP 2004 提高组] 合并果子 加强版

这道题,只是加强了一下数据范围,我们之前解决这道题用的是堆加贪心的思路,这里简单回顾一下,我们建个小堆,然后每次拿出最小的两个数据然后合并,合并后放会堆中,进行改操作需要用n*logn的时间复杂度,1e8会超时,我们就得采取其他的方法。

由于我们每次选了两个数合并之后的数会一次比一次大,这里就存在单调性,我们会先拿走先进来的数,这不就是我们的队列数据结构吗?我们用一个队列来放我们合并后的数据,一个我们用队列来放按照降序排完序的数据,然后我们每次比较两个队列,每次拿出最小的,然后需要进行n-1次操作,我们排序如果用快排的化时间复杂度也是n*logn,还是会超时,这里我们看到数据范围是

 

我们可以采用计数排序,我们还得使用快速读写,不然也会超时。

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <queue>using namespace std;
typedef long long LL;
const int N = 1e5 + 10;
int n;
int cnt[N]; // 计数排序
LL tmp[3]; // 标记需要合并的两个果⼦
queue<LL> q[3]; // q[1] q[2]int read()
{int ret = 0;char ch = getchar();while (ch > '9' || ch < '0') ch = getchar();while (ch <= '9' && ch >= '0'){ret = 10 * ret + ch - '0';ch = getchar();}return ret;
}
int main()
{int n = read();for (int i = 1; i <= n; i++){int x = read();cnt[x]++;}for (int i = 1; i < N; i++)while (cnt[i]--)q[1].push(i);LL ret = 0;for (int i = 1; i < n; i++){for (int j = 1; j <= 2; j++){if (q[2].empty() || (q[1].size() && q[2].front() > q[1].front())){tmp[j] = q[1].front();q[1].pop();}else{tmp[j] = q[2].front();q[2].pop();}}ret += tmp[1] + tmp[2];q[2].push(tmp[1] + tmp[2]);}printf("%lld\n", ret);return 0;
}

P1514 [NOIP 2010 提高组] 引水入城

我们先来考虑一下最简单的情况,不能填满时:

我们对第一行进行dfs然后遍历最后一行,最后一行如果有st为false时就代表该格子没有被遍历到,让ret++,经典的floodfill问题。

有解的情况:

结论:在有解的的情况下,某⼀个蓄⽔⼚的⽔如果能流到最后⼀⾏,必定是⼀段连续的区域。

反证法:如果红色的填缺口的话,那为什么不走紫色的路呢?

. 那么,在 dfs 的过程中,维护出以 ( i , j ) 出发,能覆盖到最后⼀⾏的最左以及最右端点;
. 所有区间维护之后,问题就变成:选取最少的区间,覆盖 [1, n ] 的所有端点。经典的贪⼼问题:
  对于坐标轴上的每⼀个点 x ,选取能够覆盖它的最右区间来覆盖它。
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cstring>using namespace std;
int n, m;
const int N = 510;
bool st[N][N];
int l[N][N];
int r[N][N];
int a[N][N];
int dx[] = { 0, 0, 1, -1 };
int dy[] = { 1, -1, 0, 0 };
void dfs(int i, int j)
{st[i][j] = true;for (int k = 0; k < 4; k++){int x = i + dx[k], y = j + dy[k];if (x < 1 || x > n || y < 1 || y > m || a[x][y] >= a[i][j]) continue;if (!st[x][y]) dfs(x, y);l[i][j] = min(l[i][j], l[x][y]);r[i][j] = max(r[i][j], r[x][y]);}
}
int main()
{cin >> n >> m;for (int i = 1; i <= n; i++)for (int j = 1; j <= m; j++)cin >> a[i][j];memset(l, 0x3f, sizeof l);for (int j = 1; j <= m; j++)l[n][j] = r[n][j] = j;for (int j = 1; j <= m; j++)if (!st[1][j]) dfs(1, j);int cnt = 0;for (int j = 1; j <= m; j++)if (!st[n][j]) cnt++;if (cnt){cout << 0 << endl << cnt << endl;return 0;}int x = 1;while (x <= m){int right = 0;for (int i = 1; i <= m; i++)if (l[1][i] <= x)right = max(right, r[1][i]);cnt++;x = right + 1;}cout << 1 << endl << cnt << endl;return 0;
}


http://www.hkcw.cn/article/SQFyQqIEaG.shtml

相关文章

优化 Transformer 模型:基于知识蒸馏、量化技术及 ONNX

Transformer 模型非常强大&#xff0c;但往往太大太慢&#xff0c;不适合实时应用。为了解决这个问题&#xff0c;我们来看看三种关键的优化技术&#xff1a;知识蒸馏、量化和ONNX 图优化。这些技术可以显著减少推理时间和内存使用。 为了说明每种技术的利弊&#xff0c;我们以…

C++实现图形化2048小游戏

目录 一、游戏规则二、步骤实现(一) SDL库的安装(二) 初始化游戏界面1. 后台数字模型2 显示模型2.1 SDL库的使用2.1.1 窗口渲染2.1.2 矩形绘制 2.2 SDL-ttf库的使用2.2.1 设置字体属性2.2.2 创建纹理图层2.2.3 绘制文字 (三) 随机生成2个数字&#xff08;2或4&#xff09;(四) …

Halcon光度立体法

1、光度立体法&#xff0c;可用于将对象的三维形状与其二维纹理&#xff08;例如打印图像&#xff09;分离。需要用不同方向而且已知照明方向的多个光源&#xff0c;拍摄同一物体的至少三张图像。请注意&#xff0c;所有图像的相机视角必须相同。 物体的三维形状主要被计算为三…

北方局地40℃又来了 干热烤验来临

天气即将变热,南北方的高温特点各不相同。北方是干热型高温,南方则是闷热型高温。全国大部分地区降水稀少,仅局部有雨。从今天夜间到后两天,降水预报图上将出现大片无降水区域,雨水不再是天气舞台的主要角色。气温成为焦点,南北方30℃以上的高温将连成一片,部分地区还将…

【后端架构师的发展路线】

后端架构师的发展路线是从基础开发到技术领导的系统性进阶过程&#xff0c;需融合技术深度、架构思维和业务洞察力。以下是基于行业实践的职业发展路径和关键能力模型&#xff1a; 一、职业发展阶梯‌ 初级工程师&#xff08;1-3年&#xff09;‌ 核心能力‌&#xff1a;掌…

Python爬虫监控程序设计思路

最近因为爬虫程序太多&#xff0c;想要为Python爬虫设计一个监控程序&#xff0c;主要功能包括一下几种&#xff1a; 1、监控爬虫的运行状态&#xff08;是否在运行、运行时间等&#xff09; 2、监控爬虫的性能&#xff08;如请求频率、响应时间、错误率等&#xff09; 3、资…

[手写系列]从0到1开发并上线Edge浏览器插件

[手写系列]从0到1开发并上线Edge浏览器插件 一、实战开发 我们将从0到1创建一个实用的"页面分析助手"插件&#xff0c;它可以显示当前页面的字数统计、阅读时间和主要关键词。 官方插件文档链接&#xff1a;https://learn.microsoft.com/zh-cn/microsoft-edge/exten…

归一化还是标准化?如何为你的数据选择最佳缩放方法

为什么你的模型需要"身高均等"&#xff1f; 想象一下&#xff0c;如果你在篮球队里同时安排了姚明&#xff08;2.29米&#xff09;和"小土豆"姜山&#xff08;1.65米&#xff09;一起打球&#xff0c;结果会怎样&#xff1f;显然&#xff0c;姚明会"…

JS逆向-基础入门案例(详细步骤)

一、基础入门案例AES(详细步骤) https://36kr.com/p/952011547555464 点击搜索 输入 decrypt( 看看是否有AES.decrypt( 点进去之后&#xff0c;打断点&#xff0c;打完断点之后&#xff0c;进行刷新 复制内容&#xff0c;可以在控制台输入 可以看到能获取到明文数据 创建…

项目目标和期望未被清晰传达,如何改进?

在项目管理实践中&#xff0c;目标模糊、期望不明、沟通渠道混乱是导致项目偏离方向、资源浪费和团队士气低落的核心原因。根据PMI《项目管理知识体系指南》&#xff08;PMBOK&#xff09;&#xff0c;超过39%的项目失败源于沟通不畅。要有效解决这一问题&#xff0c;必须优化沟…

推荐一款PDF压缩的工具

今天一位小伙伴找来&#xff0c;问我有没有办法将PDF变小的办法。 详细了解了一下使用场景&#xff1a; 小伙伴要在某系统上传一个PDF文件&#xff0c;原文件是11.6MB&#xff0c;但是上传时系统做了限制&#xff0c;只能上传小于10MB的文件&#xff0c;如图&#xff1a; 我听…

以太网帧结构和封装【三】-- TCP/UDP头部信息

TCP头部用于建立可靠连接、流量控制及数据完整性校验。 Ipv4封装tcp报&#xff1a; Ipv6封装tcp报&#xff1a; UDP头部信息 UDP关键协议特性&#xff1a; 1&#xff09;无连接&#xff1a;无需握手&#xff0c;直接发送数据。 2&#xff09;不可靠性&#xff1a;不保证数据…

61、ESB详解

ESB&#xff08;Enterprise Service Bus&#xff0c;企业服务总线&#xff09;是一种用于集成企业内不同应用程序和系统的中间件架构&#xff0c;它在企业信息化建设中扮演着关键角色&#xff0c;以下从核心概念、架构组成、功能特性、应用场景、优势与挑战几个方面进行详解&am…

六步完成软件验收:从计划到终验的全面指南(二)

在软件开发项目中&#xff0c;验收环节是确保软件质量、满足客户需求并成功交付的关键步骤。本文将为您详细介绍如何通过六个步骤&#xff0c;从计划到终验&#xff0c;全面完成软件验收工作。 四、执行验收测试并记录结果 按照验收测试计划&#xff0c;执行相应的测试用例&am…

fdisk给磁盘扩容实录

fdisk给磁盘扩容实录 步骤 1:对 /dev/sdb 进行分区步骤 2:创建物理卷(PV)步骤 3:将物理卷添加到卷组(VG)步骤 4:扩展逻辑卷(LV)步骤 5:调整文件系统大小步骤 1:对 /dev/sdb 进行分区 使用 fdisk 工具对 /dev/sdb 进行分区,创建一个新分区。 fdisk /dev/sdb 在 fd…

AbMole| Dimethyl sulfoxide(DMSO, 二甲基亚砜)

Dimethyl sulfoxide&#xff08;DMSO&#xff0c;二甲基亚砜&#xff09;是一种常用的有机溶剂&#xff0c;溶解能力强&#xff0c;能溶于水、乙醇、丙醇、乙醚、苯和氯仿等大多数有机物&#xff0c;可用于化合物等产品的溶解。 一、化学性质/溶解性/储存 分子量78.13分子式C2…

多线程1(Thread)

认识线程&#xff08;Thread&#xff09; 在进程中&#xff0c;要创建一个进程和销毁一个进程所消耗的硬件和软件资源是巨大的&#xff0c;因此为了优化上述过程&#xff0c;我们引入了“线程”。 线程是系统调度的基本单位。 1&#xff09;线程和进程的关系 可以认为进程包…

如何进行页面前端监控

&#x1f9d1;‍&#x1f4bb; 写在开头 点赞 收藏 学会&#x1f923;&#x1f923;&#x1f923; 前端监控主要分三个方向 前端性能&#xff08;用户体验优化&#xff09; 异常监控 业务指标跟 下面我来分别介绍三类指标如何获取 1&#xff09;前端性能指标&#xff1a; …

【JAVA版】意象CRM客户关系管理系统+uniapp全开源

一.介绍 CRM意象客户关系管理系统&#xff0c;是一个综合性的客户管理平台&#xff0c;旨在帮助企业高效地管理客户信息、商机、合同以及员工业绩。系统通过首页、系统管理、工作流程、审批中心、线索管理、客户管理、商机管理、合同管理、CRM系统、数据统计和系统配置等模块&…

【Python连接数据库基础 04】Django ORM开发指南:模型设计与高效查询完全攻略

Django ORM开发指南&#xff1a;模型设计与高效查询完全攻略 关键词&#xff1a;Django ORM、模型设计、数据库查询优化、Model关系、QuerySet、数据库性能、Python Web开发、ORM最佳实践 摘要&#xff1a;深入解析Django ORM的核心概念和高级用法&#xff0c;从模型设计原则到…