VP Educational Codeforces Round 5

news/2025/3/12 12:38:38/文章来源:https://www.cnblogs.com/maburb/p/18717980

A. Comparing Two Long Integers

题意:给你两个可能包含前导零的数字,判断它们的大小关系。

去除前导零后,先判断位数,位数相同再判断大小。

点击查看代码
void solve() {std::string a, b;std::cin >> a >> b;std::reverse(a.begin(), a.end());std::reverse(b.begin(), b.end());while (a.size() > 1 && a.back() == '0') {a.pop_back();}while (b.size() > 1 && b.back() == '0') {b.pop_back();}std::reverse(a.begin(), a.end());std::reverse(b.begin(), b.end());if (a.size() == b.size()) {if (a > b) {std::cout << ">\n";} else if (a < b) {std::cout << "<\n";} else {std::cout << "=\n";}} else if (a.size() > b.size()) {std::cout << ">\n";} else {std::cout << "<\n";}
}

B. Dinner with Emma

题意:给你一个矩阵,第一个人选择行,第二个人选择列,结果就是改行列格子上的数。第一个希望结果更大,第二个希望结果更小。求结果。

因为第二个人肯定选一行中最小的那一个,所以第一个人应该选择最小数最大的一行。

点击查看代码
void solve() {int n, m;std::cin >> n >> m;std::vector a(n, std::vector<int>(m));int max = 0;for (int i = 0; i < n; ++ i) {for (int j = 0; j < m; ++ j) {std::cin >> a[i][j];}max = std::max(max, *std::min_element(a[i].begin(), a[i].end()));}std::cout << max << "\n";
}

C. The Labyrinth

题意:给你一个字符矩阵,有些地方是障碍,有些地方是空地,判断每个障碍变成空地后所在的空地联通块有多少空地。

用并查集维护空地联通块及其个数,然后对于每个障碍将相邻的空地联通块加到set里去重记录答案即可。

点击查看代码
struct DSU {std::vector<int> fa, cnt;DSU(int _n) {init(_n);}void init(int _n) {fa.assign(_n, 0);cnt.assign(_n, 1);std::iota(fa.begin(), fa.end(), 0);}int find(int x) {return x == fa[x] ? x : fa[x] = find(fa[x]);}bool merge(int x, int y) {x = find(x), y = find(y);if (x == y) {return false;}fa[y] = x;cnt[x] += cnt[y];return true;}bool same(int x, int y) {return find(x) == find(y);}int size(int x) {return cnt[find(x)];}
};void solve() {int n, m;std::cin >> n >> m;std::vector<std::string> s(n);for (int i = 0; i < n; ++ i) {std::cin >> s[i];}auto get = [&](int i, int j) -> int {return i * m + j;};const int dx[] = {-1, 0, 1, 0}, dy[] = {0, 1, 0, -1};DSU dsu(n * m);for (int i = 0; i < n; ++ i) {for (int j = 0; j < m; ++ j) {if (s[i][j] == '.') {for (int k = 0; k < 4; ++ k) {int x = i + dx[k], y = j + dy[k];if (x < 0 || x >= n || y < 0 || y >= m || s[x][y] == '*') {continue;}dsu.merge(get(i, j), get(x, y));}}}}std::vector<std::string> ans(n, std::string(m, '.'));for (int i = 0; i < n; ++ i) {for (int j = 0; j < m; ++ j) {if (s[i][j] == '*') {std::set<int> set;for (int k = 0; k < 4; ++ k) {int x = i + dx[k], y = j + dy[k];if (x < 0 || x >= n || y < 0 || y >= m || s[x][y] == '*') {continue;}set.insert(dsu.find(get(x, y)));}int sum = 1;for (auto & id : set) {sum += dsu.size(id);}ans[i][j] = '0' + sum % 10;}}}for (int i = 0; i < n; ++ i) {std::cout << ans[i] << "\n";}
}

D. Longest k-Good Segment

题意:给你一个数字,判断最长的子序列其中不同元素不超过\(k\)个。

双指针经典题,维护每个数出现次数双指针扫描记答案。

点击查看代码
void solve() {int n, k;std::cin >> n >> k;std::vector<int> a(n);for (int i = 0; i < n; ++ i) {std::cin >> a[i];}const int N = 1e6 + 5;std::vector<int> cnt(N);int ans = 0, ansl = 0, ansr = 0, sum = 0;for (int i = 0, j = 0; j < n;) {while (j < n && sum + (cnt[a[j]] == 0) <= k) {if ( ++ cnt[a[j]] == 1) {++ sum;}++ j;}if (j - i > ans) {ans = j - i;ansl = i;ansr = j - 1;}if ( -- cnt[a[i]] == 0) {-- sum;}++ i;}std::cout << ansl + 1 << " " << ansr + 1 << "\n";
}

E. Sum of Remainders

题意:给你两个数\(n, m\),求\(\sum_{i=1}^{m} n \% i\)的值。

也是经典题,今年牛客寒假集训营考过。
考虑数论分块,对于每个\([l, r]\),有任意的\(i \in [l, r], j \in [l, r]\)\(\frac{n}{l} = \frac{n}{r}\),则\(n\)对它们取模的模数形成一个等差序列,首项为\(n \% l\),公差为\(\frac{n}{l}\)

点击查看代码
void solve() {i64 n, m;std::cin >> n >> m;Z ans = (Z)std::max(0ll, m - n) * n;m = std::min(m, n);for (i64 l = 1; l <= m;) {i64 r = std::min(m, n / (n / l));Z a = n % l, d = n / l;ans += (Z)(r - l + 1) * (a + a - d * (Z)(r - l)) / 2;l = r + 1;}std::cout << ans << "\n";
}

F. Expensive Strings

待补

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vxe-table grid 4.11+ 和 3.13+ 使用展开行详解

vxe-table 使用展开行的两种模式详解, vxe-table 4.11+ v3.13+展开内容支持两种方式,固定和内嵌,其中默认的固定模式是全功能的,内嵌模式不支持虚拟滚动。 官网:https://vxetable.cn 固定模式固定模式,渲染性能最好,支持冻结列、虚拟滚动和单元格选择等 <template>…

【后端】简化部署交互设计方案V2

一、部署流程 1.1 按需获取安装包 获取安装包和校验码,并校验安装包的完整性。 1.2 配置安装和升级部署 解压安装包,配置必要的参数(例如IP和主机名等),然后执行安装工具进行安装,如果授权码有误,则会退出安装。安装的时候会根据当前已经安装的版本情况,让用户选择升级…

【后端】简化部署设计方案V2——技术实现方案

一、安装部署核心内容包的结构 部署核心内容包包含了对操作系统的优化、中间件的安装配置和子平台的安装配置等类型。 1.1 现有交互式部署工具V1的小组件部署结构 目前的交互式部署工具V1进行细化的部署工作,V1工具为每个组件定义了完整的部署逻辑,同时V1工具也为每一个可变参…

最大连续和(单调队列dp)

这道题对取最大值的地方有要求,要先取最大值再入队

Mysql之B树

B-树 B-树(B树或B_树),这里的 B 表示 balance( 平衡的意思),B-树是一种多路自平衡的搜索树(B树是一颗多路平衡查找树) 它类似普通的平衡二叉树,不同的一点是B-树允许每个节点有更多的子节点。下图是 B-树的简化图。B-树有如下特点所有键值分布在整颗树中(索引值和具体dat…

Svelte 最新中文文档翻译(10)—— use: 与 Actions

前言 Svelte,一个非常“有趣”、用起来“很爽”的前端框架。从 Svelte 诞生之初,就备受开发者的喜爱,根据统计,从 2019 年到 2024 年,连续 6 年一直是开发者最感兴趣的前端框架 No.1:Svelte 以其独特的编译时优化机制著称,具有轻量级、高性能、易上手等特性,非常适合构…

如何在啥也不懂的情况下将你的公众号接入DeepSeek或其它大模型

本文详细介绍了零基础用户如何借助AI工具将微信公众号接入DeepSeek等大模型实现智能回复的全流程。首先通过AI问答确定开源项目chatgpt-on-wechat,利用豆包AI分析项目结构后选择Docker部署方案。重点讲解了在Ubuntu系统配置国内镜像安装Docker、编写含中文注释的docker-compos…

rust学习十八.1、RUST的OOP和简单示例

很可惜,出于一些理由,rust抛弃了OOP的核心特性之一:继承 其中一个理由应该是至关重要的,但是解释的比较模糊:继承增加了复杂性的确,继承会让rust编译器变得更加复杂。rust编译器虽然足够体贴,但是它偏慢的编译速度也是很多人所吐槽的。 在我对rust编译了解更多之前,我对…

【后端】简化部署设计方案——内层设计方案

根据《简化部署设计方案V2》的内容,内层部署需要提供的 .sh 脚本应覆盖部署流程的各个阶段,确保组件能够顺利安装、配置、启动、检查状态,并支持升级和卸载。 一、 部署某组件所需的内层结构 左侧是约定的内层结构,右侧的其他部署的内容物,按需存放即可。1.1 scripts目录:…

H3C CX8028 GPFS并行文件系统全闪存储配置案例

H3C华三CX8028使用IBM的GPFS商业授权的一款全闪存储设备。本案中,客户机服务器与存储服务器均搭配双口200G网卡 ,配合200G的ROCE网络搭建集群。 GPRS文件系统中,存储集群不光需要把存储服务器组织在一起,客户机也需要在集群中声明身份,参与到集群之中,这并不像传统的集中…

【kali】在Kali Linux中安装Navicat17

Navicat 是笔者最喜欢的一款专业的数据库管理工具,不仅支持多种数据库类型,而且它提供了直观的用户界面和丰富的功能,帮助用户轻松管理和操作数据库,提高工作效率。 通过,Navicat我们是在Windows环境中部署的。本文以KALI为例,讲解如何在Linux环境中部署。 首先,我们从官…

URL 生成网站截图 API 数据接口

URL 生成网站截图 API 数据接口 网站工具 / 截图 高效生成网页截图 生成网页截图 / 图片输出。1. 产品功能支持全页截图和视窗截图; 支持自定义截图尺寸; 兼容移动设备截图; 支持暗黑模式截图; 固定参数请求,可以得到最新的站点截图; 快速高效的截图生成; 全接口支持 HT…