Codeforces Round 1051 (Div. 2) A~D2

news/2025/9/19 21:44:26/文章来源:https://www.cnblogs.com/Kescholar/p/19101757

A. All Lengths Subtraction

思维。

每次选择长度为 \(k(k \in [1,n])\) 的区间减 \(1\),那么第一个首选的就是 \(a_i = n\) 的 位置,然后维护 \(n\) 所在的区间,检查 \(n-k+1\) 是否在其两边,有的话就扩大区间,否则就肯定不能实现。

点击查看代码
#include <bits/stdc++.h>using namespace std;using i64 = long long;void solve() {int n;cin >> n;int l = 0, r = n;vector<int> p(n + 1);for (int i = 1; i <= n; i += 1) {cin >> p[i];if (p[i] == n) {l = r = i;}}for (int i = n - 1; i >= 1; i -= 1) {if (r + 1 <= n && p[r + 1] == i) {r += 1;}else if (l - 1 >= 1 && p[l - 1] == i) {l -= 1;}else {cout << "NO\n";return;}}cout << "YES\n";}
int main() {ios::sync_with_stdio(false);cin.tie(nullptr);int t;cin >> t;while (t--) {solve();}return 0;
}

B. Discounts

贪心。

由于价值 \(x\) 的劵需要购买 \(x-1\) 个最贵的,那么为了付出的钱更少白嫖的物品价值更高,那我们肯定得选择 \(x\) 小的劵去购买从大到小排序后前 \(x\) 个物品,按此方法模拟即可。

点击查看代码
#include <bits/stdc++.h>using namespace std;using i64 = long long;void solve() {int n, k;cin >> n >> k;vector<int> a(n + 1), b(k + 1);for (int i = 1; i <= n; i += 1) {cin >> a[i];}for (int i = 1; i <= k; i += 1) {cin >> b[i];}sort(a.begin() + 1, a.end());sort(b.begin() + 1, b.end());i64 ans = 0;int idx = 1;for (int i = n; i >= 1; i -= 1) {if (idx <= k && i - b[idx] + 1 >= 1) {for (int j = i; j > i - b[idx] + 1; j -= 1) {ans += a[j];}i = i - b[idx] + 1;idx += 1;}else {ans += a[i];}}cout << ans << "\n";}
int main() {ios::sync_with_stdio(false);cin.tie(nullptr);int t;cin >> t;while (t--) {solve();}return 0;
}

C. Max Tree

拓扑。

首先贪心的想,要想最大化贡献,那对于每一条边来说,其实就已经有了个评判标准,按照评判标准确定谁连向谁,父亲的值要大于儿子,所以只要对进入队列的点依次赋值 \(n,n-1,n-2...\) 即可。

我这里是按照贡献贪心的去判定边的连向,不过貌似多此一举了,因为只有 \(n-1\) 条边,所以只要对每条边判一下谁的贡献更大就可以确定朝向了。

点击查看代码
#include <bits/stdc++.h>using namespace std;using i64 = long long;void solve() {int n;cin >> n;vector<array<int,3>> Q;for (int i = 1; i < n; i += 1) {int u, v, x, y;cin >> u >> v >> x >> y;Q.push_back({x, u, v});Q.push_back({y, v, u});}vector<int> in(n + 1);vector e(n + 1, vector<int>());set<array<int,2>> has;sort(Q.begin(), Q.end(), greater<>());for (auto &[_, u, v] : Q) {if (has.count({u, v}) || has.count({v, u})) {continue;}has.insert({u, v});in[v] += 1;e[u].push_back(v);}int now = n;vector<int> ans(n + 1);queue<int> pq;for (int i = 1; i <= n; i += 1) {if (in[i] == 0) {pq.push(i);}}while (pq.size()) {auto u = pq.front();pq.pop();ans[u] = now --;for (auto &v : e[u]) {if (!--in[v]) {pq.push(v);}}}for (int i = 1; i <= n; i += 1) {cout << ans[i] << " \n"[i == n];}}
int main() {ios::sync_with_stdio(false);cin.tie(nullptr);int t;cin >> t;while (t--) {solve();}return 0;
}

D1. Inversion Graph Coloring (Easy Version)

dp。

手推或者打表能发现一条规律,那就是对于 \(i<j< k\) 来说,存在 \(a_i > a_j > a_k\) 这样的序列是不合法的,因为这会导致三个点两两不同颜色,但我们最多只能涂两个颜色,即严格最长下降子序列的长度小于等于 \(2\),否则无法实现。

\(dp_{i,j,k}\) 表示前 \(i\) 个数中最长下降子序列的第一个数为 \(j\),第二个数为 \(k\) 的方案数。
那么当我们不选第 \(i\) 个数时,有转移:

\[dp_{i,j,k}=dp_{i-1,j,k} \]

选择第 \(i\) 个数时,有转移:

\[\begin{aligned} dp_{i,a_i,k} = dp_{i,a_i,k} + dp_{i-1,j,k} & & a_i \ge j \\ dp_{i,j,a_i} = dp_{i,j,a_i} + dp_{i-1,j,k} & & j > a_i \ge k \end{aligned} \]

\(a_i < k\) 时,会形成长度为 \(3\) 的下降子序列,所以是不合法的转移。

代码中 Z 类型为取模类。

点击查看代码
using Z = ModInt<MOD[0]>;void solve() {int n;cin >> n;vector<int> a(n + 1);for (int i = 1; i <= n; i += 1) {cin >> a[i];}Z ans = 0;vector dp(n + 1, vector<Z>(n + 1));dp[0][0] = 1;for (int i = 1; i <= n; i += 1) {vector ndp(n + 1, vector<Z>(n + 1));for (int j = 0; j <= n; j += 1) {for (int k = 0; k <= j; k += 1) {ndp[j][k] += dp[j][k];if (a[i] >= j) {ndp[a[i]][k] += dp[j][k];}else if (a[i] >= k) {ndp[j][a[i]] += dp[j][k];}}}dp = move(ndp);}for (int i = 0; i <= n; i += 1) {for (int j = 0; j <= n; j += 1) {ans += dp[i][j];}}cout << ans << "\n";}
int main() {ios::sync_with_stdio(false);cin.tie(nullptr);int t;cin >> t;while (t--) {solve();}return 0;
}

D2. Inversion Graph Coloring (Hard Version)

数据结构优化 dp。

观察以上转移,可以发现,其实有 \(dp_{i,a_i,k} = \sum_{j=0}^{a_i}dp_{i-1,j,k},\ dp_{i,j,a_i}=\sum_{k=0}^{a_i}dp_{i-1,j,k}\)

这两个前缀和部分可以用树状数组维护,把 \(j、k\) 展平到二维上,就是一个维护第 \(k\) 列前 \(j\) 行的和,一个维护第 \(j\) 行前 \(k\) 列的和。

由于 \(n\le 2000\), 所以一定是要滚动的,一个方法是先把要转移的状态和值存下来放到最后转移。

如果你的树状数组不是从 \(1\) 开始的,记得偏移 \(1\) 位。

代码中 Z 是取模类。

点击查看代码
using Z = ModInt<MOD[0]>;template<typename T>
struct BIT {int n;vector<T> w;BIT() {}BIT(int n) {this->n = n;w.resize(n + 1);}void update(int x, T k) {for (; x <= n; x += x & -x) {w[x] += k;}}T ask(int x) {T ans = 0;for (; x; x -= x & -x) {ans += w[x];}return ans;}T ask(int x, int y) {return ask(y) - ask(x - 1);}
};void solve() {int n;cin >> n;vector<int> a(n + 1);for (int i = 1; i <= n; i += 1) {cin >> a[i];}Z ans = 0;vector f(2, vector(n + 1, BIT<Z>(n + 2)));f[0][0].update(1, 1);f[1][0].update(1, 1);for (int i = 1; i <= n; i += 1) {vector<tuple<int,int,Z>> st;for (int j = 0; j <= a[i]; j += 1) {Z res = f[0][j].ask(a[i] + 1);st.emplace_back(a[i], j, res);}for (int j = a[i] + 1; j <= n; j += 1) {Z res = f[1][j].ask(a[i] + 1);st.emplace_back(j, a[i], res);}for(auto &[u, v, res] : st){f[0][v].update(u + 1, res);f[1][u].update(v + 1, res);}}for (int i = 0; i <= n; i += 1) {ans += f[1][i].ask(n + 1);}cout << ans << "\n";}
int main() {ios::sync_with_stdio(false);cin.tie(nullptr);int t;cin >> t;while (t--) {solve();}return 0;
}

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

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

相关文章

【F#学习】数组:Array

Array 在F#中, 一个数组(Array)包含0个或多个元素,长度固定,但内容可以改变。元素需要具有相同的类型。 // 声明一个数组。注意看清操作符是 [| 和 |] let empty = [| |] let emptyAlternative = Array.emptylet …

CTFWEB姿势总结

CTFWEB姿势总结 RCE 尝试是否有命令执行漏洞 示例 payload 思路(Linux 为例):简单命令report; whoami report|whoami report$(whoami)如果 URL 执行后页面输出了你的用户名(例如 www-data),说明命令执行存在。 W…

详细介绍:架构思维:分布式缓存实战

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

规模化加速AI:从用户、开发者到企业的深度策略解析

本文深入探讨了加速AI系统的三大维度:终端用户追求的实时响应体验、开发者面临的数据与硬件瓶颈解决方案,以及企业关注的投产效率与合规性。文章详细分析了边缘推理、模型压缩、多云GPU调度等关键技术策略,并引用行…

ctfshow 菜狗杯

没想到在菜狗杯写到了qq列表里的佬出的题ctfshow 小舔田? <?php include "flag.php"; highlight_file(__FILE__);class Moon{public $name="月亮";public function __toString(){return $thi…

详细介绍:测试用例详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

国际服务器(VPS):泰国、印尼、菲律宾、马来西亚、香港、台湾、新加坡、日本、美国、英国等。

VPS 国际服务器(VPS):泰国、印尼、菲律宾、马来西亚、香港、台湾、新加坡、日本、美国、英国等。 mleo.siteVPS推荐 泰国、印尼、韩国、菲律宾、马来西亚、亚太等 Lightnode:1C2G-$7.71/Month 美国(Month) CloudCo…

缓存常见问题

缓存常见问题 缓存穿透 概念: 查询缓存中没有,数据库也没有的数据,大量的请求都穿透了缓存层直达数据库,导致数据库因压力过大而宕机。 本质是一种人为攻击手段。 解决方案:数据库不存在数据时,存放一个临时数据到缓存…

ctfshow 电子取证

这里的电子取证应该说算入门难度,不是很难,感兴趣的新手可以了解一下JiaJia-CP-1 先把题目文件下载下来看到是raw后缀,常见的内存镜像的后缀,使用volatility打开(这边真心建议使用kali中的volatility打开,windows…

插入排序与希尔排序 - 实践

插入排序与希尔排序 - 实践2025-09-19 21:28 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; …

最新IDEA 2025 专业版破解永久破解教程(附资源)intellij IDEA

一、intellij idea软件下载 [软件名称]:intellij idea 克网盘下载链接:https://pan.quark.cn/s/2af0fb5ec2e5 迅雷文件分享:Intellij IDEA 2025链接:https://pan.xunlei.com/s/VO_X5mj3eocLmO5BuL5ztWKhA1?pwd=uw…

AtCoder ABC423F - Loud Cicada 题解 容斥原理

题目大意: 问 \([1, Y]\) 范围内有多少个数是:\(A_1, A_2, \ldots, A_N\) 中恰好 \(K\) 个数的倍数。 解题思路: 容斥原理。 思路完全来自 StelaYuri大佬的博客。 示例程序: #include <bits/stdc++.h> using…

1756:八皇后

题目 总时间限制: 1000ms 内存限制: 65536kB 描述 会下国际象棋的人都很清楚:皇后可以在横、竖、斜线上不限步数地吃掉其他棋子。如何将8个皇后放在棋盘上(有8 * 8个方格),使它们谁也不能被吃掉!这就是著名的八皇…

矩阵置零-leetcode

题目描述 给定一个 *m* x *n* 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 示例 1:输入:matrix = [[1,1,1],[1,0,1],[1,1,1]] 输出:[[1,0,1],[0,0,0],[1,0,1]]示例 2:输…

重新开始配置hadoop等

重新开始配置hadoop等1

IIS 部署 asp.net core 实用的方案时,出现500.19、500.31问题的解决方案

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

嘉立创常用快捷键

在EDA设计中使用快捷键能帮我们快速完成设计, 本人使用的是嘉立创EDA专业版,快捷键设置可以打开设置如下图打开之后我们可以对快捷键进行调整设置。附常用快捷键: 基础操作 空格键:旋转所选图形。 R:旋转图形。 X:…

02020402 EF Core基础02-EF Core数据的增删改查

02020402 EF Core基础02-EF Core数据的增删改查 1. EF Core数据的增删改查(视频3-3)创建.NET Core控制台项目,项目文档如下。// Book.cs using System;namespace EF CoreDemo {public class Book{public long Id {…

conda 无法安装依赖 CondaHTTPError: HTTP 000 CONNECTION FAILED for url: tsinghua tencentaliyun

在成功安装conda软件后, 尝试安装python 虚拟环境 或 python 依赖包,但报CondaHTTPError,查阅网上资料说:将下载源更换成 国内源(tsinghua/aliyun/tencent),但下载时依旧报相同的错. PS C:\Users\xxx> conda cr…

牛客刷题-Day2

动态规划1:线性dp、背包问题,区间 https://ac.nowcoder.com/acm/contest/24213?from=acdiscuss牛客刷题-Day2 今日题目:\(1006-1010\) 1006 免费馅饼 题目描述 \(SERKOI\) 最新推出了一种叫做“免费馅饼”的游戏:…