Codeforces Round 1062 (Div. 4)

news/2025/10/29 0:52:32/文章来源:https://www.cnblogs.com/maburb/p/19172982

A. Square?

点击查看代码
#include <bits/stdc++.h>using i64 = long long;void solve() {int a, b, c, d;std::cin >> a >> b >> c >> d;if (a == b && b == c && c == d) {std::cout << "Yes\n";} else {std::cout << "NO\n";}
}int main() {std::ios::sync_with_stdio(false), std::cin.tie(0), std::cout.tie(0);int t = 1;std::cin >> t;while (t -- ) {solve();}return 0;
}

B. Your Name

题意:判断两个字符串是不是组成的字符一样。

点击查看代码
#include <bits/stdc++.h>using i64 = long long;void solve() {int n;std::cin >> n;std::string s, t;std::cin >> s >> t;int cnt[26]{};for (auto & c : s) {++ cnt[c - 'a'];}for (auto & c : t) {if ( -- cnt[c - 'a'] < 0) {std::cout << "NO\n";return;}}std::cout << "YES\n";
}int main() {std::ios::sync_with_stdio(false), std::cin.tie(0), std::cout.tie(0);int t = 1;std::cin >> t;while (t -- ) {solve();}return 0;
}

C. Isamatdin and His Magic Wand!

题意:一个数组,你可以交换两个奇偶性不同的数,求交换任意次数组的最小字典序。

如果只有偶数或者奇数无法操作,否则一定可以达到升序。

点击查看代码
#include <bits/stdc++.h>using i64 = long long;void solve() {int n;std::cin >> n;std::vector<int> a(n);for (int i = 0; i < n; ++ i) {std::cin >> a[i];}bool f[2]{};for (auto & x : a) {f[x & 1] = 1;}if (f[0] && f[1]) {std::ranges::sort(a);}for (int i = 0; i < n; ++ i) {std::cout << a[i] << " \n"[i == n - 1];}
}int main() {std::ios::sync_with_stdio(false), std::cin.tie(0), std::cout.tie(0);int t = 1;std::cin >> t;while (t -- ) {solve();}return 0;
}

D. Yet Another Array Problem

题意:找一个最小的大于\(1\)的数,使得数组里有一个数和它互质。

这个数一定是一个质数,如果不是质数,则可以用它的最小质因子替换它,这样依然和另一个数互质。
那么枚举质数即可,如果因为\(a_i \leq 10^{18}\),其包含的不同质因子不超过\(20\)个,那么很快就能找到答案。

点击查看代码
#include <bits/stdc++.h>using i64 = long long;std::vector<int> minp, primes;void sieve(int n) {minp.assign(n + 1, 0);primes.clear();for (int i = 2; i <= n; ++ i) {if (minp[i] == 0) {minp[i] = i;primes.push_back(i);}for (auto p : primes) {if (i * p > n) {break;}minp[i * p] = p;if (p == minp[i]) {break;}}}
}void solve() {int n;std::cin >> n;std::vector<i64> a(n);for (int i = 0; i < n; ++ i) {std::cin >> a[i];}for (auto & p : primes) {for (int i = 0; i < n; ++ i) {if (std::gcd(a[i], p) == 1) {std::cout << p << "\n";return;}}}std::cout << -1 << "\n";
}int main() {std::ios::sync_with_stdio(false), std::cin.tie(0), std::cout.tie(0);int t = 1;sieve(1000);std::cin >> t;while (t -- ) {solve();}return 0;
}

E. khba Loves to Sleep!

题意:\([0, x]\)上有\(n\)个点,你需要选\(k\)个不同的位置,使得这\(n\)个点到其中一个位置的最小距离最大。

考虑二分。
先把数组排序,如果二分距离为\(d\),对于两个点\(a_i, a_{i+1}\)之间,可以选的位置为\([a_i + d, a_{i+1} - d]\)。判断这些位置够不够\(k\)个并且记录一下方案就行。

点击查看代码
#include <bits/stdc++.h>using i64 = long long;void solve() {int n, k, x;std::cin >> n >> k >> x;std::vector<int> a(n);for (int i = 0; i < n; ++ i) {std::cin >> a[i];}std::ranges::sort(a);if (a.back() != x) {a.push_back(2 * x);}auto check = [&](int d, bool flag) -> std::pair<bool, std::vector<int>> {std::vector<int> res;if (d == 0) {if (flag) {for (int i = 0; i < k; ++ i) {res.push_back(i);}}return {true, res};}int last = -2 * x;int cnt = 0;for (int i = 0; i < a.size(); ++ i) {int l = std::max(0, last + d), r = std::min(x, a[i] - d);if (l <= r) {cnt += r - l + 1;if (flag) {while (l <= r && res.size() < k) {res.push_back(l);++ l;}}}last = a[i];}return {cnt >= k, res};};int lo = 0, hi = x;while (lo < hi) {int mid = lo + hi + 1 >> 1;if (check(mid, false).first) {lo = mid;} else {hi = mid - 1;}}auto ans = check(lo, true).second;for (int i = 0; i < k; ++ i) {std::cout << ans[i] << " \n"[i == k - 1];}
}int main() {std::ios::sync_with_stdio(false), std::cin.tie(0), std::cout.tie(0);int t = 1;std::cin >> t;while (t -- ) {solve();}return 0;
}

F. Tree, TREE!!!

题意:对于一棵树,求对于每个点为根的情况下,选任意\(k\)个点能凑出多少不同的\(lca\)。求每个点的答案的和。

考虑对于\(u\),有多少点为根选\(k\)个点可以凑出\(lca = u\)
那么可以先任意选一个点为根,比如\(1\)。然后\(dfs\)一下记录子树节点个数。那么对于\(u\)子树外的点,不管是谁为根\(u\)的子树依然是这个样子,那么如果\(size_u \geq k\),其它\(n - size_u\)个都可以作为答案。对于\(u\)的一个儿子\(v\),它的子树的任意一个点为根,\(u\)的子树就是\(n - size_v\)个点。那么如果\(n - size_v \geq k\),有\(size_v\)个答案。最后以\(u\)为根显然也是可以的。

点击查看代码
#include <bits/stdc++.h>using i64 = long long;void solve() {int n, k;std::cin >> n >> k;std::vector<std::vector<int>> adj(n);for (int i = 1; i < n; ++ i) {int u, v;std::cin >> u >> v;-- u, -- v;adj[u].push_back(v);adj[v].push_back(u);}i64 ans = 0;std::vector<int> size(n);auto dfs = [&](auto && self, int u, int fa) -> void {size[u] = 1;for (auto & v : adj[u]) {if (v == fa) {continue;}self(self, v, u);if (n - size[v] >= k) {ans += size[v];}size[u] += size[v];}if (size[u] >= k) {ans += n - size[u];}ans += 1;};dfs(dfs, 0, -1);std::cout << ans << "\n";
}int main() {std::ios::sync_with_stdio(false), std::cin.tie(0), std::cout.tie(0);int t = 1;std::cin >> t;while (t -- ) {solve();}return 0;
}

G. Mukhammadali and the Smooth Array

题意:一个数组\(a\),你可以花费\(c_i\)\(a_i\)改成任何数。求让数组不递减的最小花费。

可以看作选一部分不操作,其它的操作的最小花费。
那么选出不操作的这一部分必须是不递减的。那么我们要让这一部分的\(c_i\)的和最大,这样另一部分的花费才会更小。
那么就是一个\(dp\)\(f_i = c_i + f_j(j <i, a_j \leq a_i)\)
这是典题,可以用树状数组优化为\(nlogn\)。维护一下前缀最大值就可以。

点击查看代码
#include <bits/stdc++.h>using i64 = long long;template <class T>
struct Fenwick {int n;std::vector<T> tr;Fenwick(int _n) {init(_n);}void init(int _n) {n = _n;tr.assign(_n + 1, T{});}void add(int x, const T &v) {for (int i = x; i <= n; i += i & -i) {tr[i] = tr[i] + v;}}T query(int x) {T res{};for (int i = x; i; i -= i & -i) {res = res + tr[i];}return res;}T sum(int l, int r) {return query(r) - query(l - 1);}
};struct Info {i64 max = 0;
};Info operator + (const Info & a, const Info & b) {return {std::max(a.max, b.max)};
}void solve() {int n;std::cin >> n;std::vector<int> a(n);for (int i = 0; i < n; ++ i) {std::cin >> a[i];}std::vector<int> c(n);for (int i = 0; i < n; ++ i) {std::cin >> c[i];}auto b = a;std::ranges::sort(b);b.erase(std::unique(b.begin(), b.end()), b.end());for (auto & x : a) {x = std::ranges::lower_bound(b, x) - b.begin() + 1;}int m = b.size();Fenwick<Info> tr(m + 1);for (int i = 0; i < n; ++ i) {tr.add(a[i], Info{tr.query(a[i]).max + c[i]});}std::cout << std::accumulate(c.begin(), c.end(), 0ll) - tr.query(m).max << "\n";
}int main() {std::ios::sync_with_stdio(false), std::cin.tie(0), std::cout.tie(0);int t = 1;std::cin >> t;while (t -- ) {solve();}return 0;
}

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

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

相关文章

一文吃透银行账务打通体系闭环 - 智慧园区

银行体系的复杂性,往往源于“账务、账户、会计、科目”之间的模糊边界。本文将系统拆解这四者的逻辑关系,从业务流、资金流到会计流,构建一套可理解、可复用的认知框架,帮助产品人真正打通银行产品设计的底层闭环。…

uups 逻辑合约也增加了升级函数,那总体不是也费gas吗?

这是一个很好的问题!虽然 UUPS 逻辑合约确实增加了升级函数,但它仍然比透明代理更省 Gas。以下是详细的原因和解释:1. UUPS 的升级函数对 Gas 的影响在 UUPS 模式中,升级逻辑(如 upgradeTo)确实存在于逻辑合约中…

【URP】Unity[纹理压缩]算法多平台对比

纹理压缩技术发展节点 ‌早期阶段 2000年代初‌ DXT/S3TC成为PC和主机平台主流,采用44像素块压缩,但移动端支持有限。 PVRTC(2008年)专为PowerVR GPU设计,要求纹理尺【从UnityURP开始探索游戏渲染】专栏-直达纹理…

AI元人文构想:三值纠缠模型

AI元人文构想:三值纠缠模型 作者:岐金兰 日期:2025年10月29日 引言: 观照个体欲望,尊重个体自感,于白箱化的价值博弈舞台,共同涌现集体客观——此三值纠缠模型,正是AI元人文构想跳动的心脏。 这精准道破,并庄…

EDK2环境搭建以及HelloWorld编译实现

本文简单介绍了Linux环境下搭建EDK2开发环境的关键步骤和命令。EDK2环境搭建以及HelloWorld编译实现 TianoCore的官方介绍 Welcome to TianoCore, the community supporting an open source implementation of the Uni…

谁生?谁死?从引用计数到可达性分析,洞悉GC的决策逻辑

谁生?谁死?从引用计数到可达性分析,洞悉GC的决策逻辑引用计数与可达性分析:谁死了,谁还活着? 垃圾回收,顾名思义,便是将已经分配出去的,但却不再使用的内存回收回来,以便能够再次分配。在Java虚拟机的语境下…

P1561 [USACO12JAN] Mountain Climbing S

Solution 简单看题容易得到一个错误的贪心: \[ans=max\{\Sigma_{k=1}^n + down_{min}, \Sigma_{k=1}^n +up_{min}\} \]然后你将可以把他 hack 掉,因为最初的方法认为第一个牛上山后,所有上下山是一起进行的,其实有…

六、阅读笔记六:保障软件可靠性的防线

《程序员修炼之道:从小工到专家》围绕软件测试与质量保障展开,系统阐述了如何通过科学的测试方法和质量管控策略,构建可靠的软件产品。在软件开发生命周期中,测试与质量保障是不可或缺的环节,它能够及时发现潜在问…

以此贴作别算法

以此贴作别算法def lcs(i, j):if i == m or j == n: return 0if s[i] == t[j]: return 1 + lcs(i+1, j+1)return max(lcs(i, j+1), lcs(i+1, j))def lcs2(i, j):if i >= m or j >= n: returni0 = i; j0 = jwhile…

五、阅读笔记五 应对复杂系统的挑战

《程序员修炼之道:从小工到专家》聚焦于并发编程与系统性能优化,为应对复杂系统的技术挑战提供了全面的解决方案。随着软件系统的规模不断扩大,用户量持续增长,并发处理能力和系统性能成为衡量软件质量的重要指标。…

P3988 [SHOI2013] 发牌

Solution 容易发现,答案就是维护当前序列的第 k 大值,而且只有删除,这个时候就可以使用权值线段树来维护。这颗树的每一个叶子表示一张牌,然后线段树记录改节点为根的子树的节点个数,接着进行查询即可,代码见下…

映射

通过ide伪造数据库 映射 Map 首先我们来了解一下什么是映射 先直到 key,value 它们往往是一对 一个键只能对应一个值,但一个值可以对应多个键 例如 苹果 -> 水果 菠萝 -> 水果 人名 -> 电话号码 学号 ->…

文件夹显示绿色成功图标方法

链接:https://blog.csdn.net/jiminkoo/article/details/131840356本文来自博客园,作者:__username,转载请注明原文链接:https://www.cnblogs.com/code3/p/19172967

【RabbitMQ】与ASP.NET Core集成

本章目标掌握在ASP.NET Core中配置和依赖注入RabbitMQ服务。学习使用IHostedService/BackgroundService实现常驻消费者服务。实现基于RabbitMQ的请求-响应模式。构建完整的微服务间异步通信解决方案。学习配置管理和健…

IMO2025 Problem 1

考虑 \(n = 3\) 时的下三角,显然有三个容易构造的解,\(k = \{0, \, 1, \, 3\}\),构造如下:那么 \(n > 3\) 呢?由于下三角的点数恰好为 \(1 + 2 + \cdots + n\) 个点,对于第一条直线,有且仅有 \(3\) 中方式覆…

Day6综合案例2-注册信息

<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0">…

2014吉林省赛题解 | CCUT应用OJ——Sign in

题目简介题源:1035-Sign in | CCUT OJ,2014 吉林省赛 C 题 题意:给定长为 \(n\) 的序列 \(A\) 与长为 \(n-1\) 的序列 \(B\),其中 \(B\subset A\),求 \(A-B\)。即:\(B\) 中恰好只有一个元素在 \(A\) 中没出现,求…

访答知识库-可以本地使用的知识库

访答知识库-可以本地使用的知识库访答知识库,一键安装,0代码使用。 支持图片、视频、语音搜索与问答 支持多模态问答

代码大全2 第三四章

读《代码大全 2》第三、四章,感觉像听老程序员唠实用嗑,没半点虚头巴脑的理论。第三章讲代码可读性,真是说到心坎里了。以前总觉得代码能跑就行,变量随便叫个 a、b、c,注释能省就省。结果过半个月回头看,自己写的…