VP Educational Codeforces Round 43 (Rated for Div. 2)

news/2025/3/30 22:09:52/文章来源:https://www.cnblogs.com/maburb/p/18796320

A. Minimum Binary Number

题意:给你一个01串,你每次可以交换相邻的两个元素,或者把两个相邻的1变成一个1。求二进制表示小最小的数。

显然我们可以把1消除到只剩一个。那么答案就是一个1加原串的所有0.
要特判原串只有一个0的情况。

点击查看代码
void solve() {int n;std::cin >> n;std::string s;std::cin >> s;if (n == 1) {std::cout << s << "\n";return;}int cnt = std::ranges::count(s, '0');std::string ans = "1" + std::string(cnt, '0');std::cout << ans << "\n";
}

B. Lara Croft and the New Game

题意:\(n\times m\)的矩阵,起点为\((1, 1)\)。按如下规则移动,先移动到\(n, 1\),然后移动到\(n, m\),之后按\(S\)型移动,也就是先移动到\(n - 1, m\),然后向左到\(n - 1, 2\),然后移动到\(n - 2, 2\),然后向右移动到\(n - 2, m\)。如此左右切换。移动一格算一步,求移动\(k\)步后到了哪里。

分两部分判断,一部分是还没有进行\(S\)型移动,也就是\(k \leq n + m - 2\)
否则求出移动了多少行,也就是\(\lceil \frac{k - (n + m - 2)}{m - 1} \rceil\),根据奇偶性得到接下来向左还是向右,然后剩下的步数就是\((k - (n + m - 2)) \% (m - 1)\)

点击查看代码
void solve() {i64 n, m, k;std::cin >> n >> m >> k;if (k <= n + m - 2) {if (k <= n - 1) {std::cout << 1 + k << " " << 1 << "\n";} else {std::cout << n << " " << k - n + 2 << "\n";}return;}k -= n + m - 2;int r = (k + m - 2) / (m - 1), c = k % (m - 1) == 0 ? m - 1 : k % (m - 1);if (r & 1) {std::cout << n - r << " " << m - c + 1 << "\n";} else {std::cout << n - r << " " << 1 + c << "\n";}
}

C. Nested Segments

题意:给你\(n\)个区间,求两个区间使得一个区间被另一个区间完全包含。

先按右端点排序,那么我们从前往后枚举,前面的区间的右端点都比当前端点小。那么我们只需要中一个左端点比当前大的进行,可以用\(set\)存前面的左端点,然后二分。

点击查看代码
void solve() {int n;std::cin >> n;std::vector<std::array<int, 3>> a(n);for (int i = 0; i < n; ++ i) {int l, r;std::cin >> l >> r;a[i] = {r, l, i};}std::ranges::sort(a, [&](std::array<int, 3> & a, std::array<int, 3> & b) {if (a[0] == b[0]) {return a[1] > b[1];}return a[0] < b[0];});std::set<std::pair<int, int>> s;for (auto & [r, l, id] : a) {auto it = s.lower_bound({l, 0});if (it != s.end()) {std::cout << it->second + 1 << " " << id + 1 <<  "\n";return;}s.insert({l, id});}std::cout << -1 << " " << -1 << "\n";
}

D. Degree Set

题意:给你一个递增序列\(d\),你要构造一个有\(d_n + 1\)个点的图,使得这些点的度数集合是\(d\)

对于一个\(n\)个点的图,如果我们给\([1, i]\)的点给其它点都连边,那么\([1, i]\)的点的度数都是\(n - 1\),其它点的度数是\(i\)
那么我们可以先给\([1, d_1]\)\([1, d_n]\)其它点都连边,然后给\([d_1 + 1, d_2]\)的点\([d_1 + 1, d_{n-1}+1]\)的点都连边,给\([d_{i-1} + 1, d_i]\)\([d_{i} + 1, d_{n-i+1}+1]\)的连边,就正好满足条件。因为第\(i\)部分的每个点有\(n - d_{n-i+1} - 1\)个没和它连边,度数恰好是\(d{n-i+1}\)

点击查看代码
void solve() {int n;std::cin >> n;std::vector<int> a(n + 1);for (int i = 1; i <= n; ++ i) {std::cin >> a[i];}int l = 1, r = n;std::vector<std::pair<int, int>> ans;while (l <= r) {for (int i = a[l - 1] + 1; i <= a[l]; ++ i) {for (int j = i + 1; j <= a[r] + 1; ++ j) {ans.emplace_back(i, j);}}++ l;-- r;}std::cout << ans.size() << "\n";for (auto & [u, v] : ans) {std::cout << u << " " << v << "\n";}
}

E. Well played!

题意:有\(n\)个人,每个有生命值和攻击力,你可以进行\(a\)次操作把某个人的生命值乘二,可以进行\(b\)次操作把攻击力的值变成生命值的值。问最终攻击力最大和。

我们把第一类操作都给一个人值最优的。因为如果一个人生命值乘二然后赋值给攻击力更优,那么下一次再给他乘二,它也是最优的。
那么我们枚举第一类操作给谁,然后选\(k-1\)个人把生命值赋值给攻击力,这个可以用\(set\)维护。

点击查看代码
void solve() {int n, m, k;std::cin >> n >> m >> k;k = std::min(n, k);i64 sum = 0;std::vector<std::array<int, 3>> a(n);for (int i = 0; i < n; ++ i) {int h, d;std::cin >> h >> d;a[i] = {h - d, h, d};sum += d;}if (k == 0) {std::cout << sum << "\n";return;}  std::ranges::sort(a, std::greater<>());std::multiset<int> s;for (int i = 0; i < k; ++ i) {if (a[i][0] > 0) {s.insert(a[i][0]);sum += a[i][0];}}i64 ans = sum;for (int i = 0; i < n; ++ i) {if (a[i][0] > 0 && i < k) {s.extract(a[i][0]);sum -= a[i][0];}i64 v = (1ll << m) * a[i][1] - a[i][2];if (s.size() == k) {ans = std::max(ans, sum - *s.begin() + v);} else {ans = std::max(ans, sum + v);}if (a[i][0] > 0 && i < k) {s.insert(a[i][0]);sum += a[i][0];}   	}std::cout << ans << "\n";
}

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

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

相关文章

PLM项目管理软件如何支持企业的产品合规管理?

产品合规管理在企业运营中至关重要,关乎企业的声誉、市场竞争力以及可持续发展。随着市场环境的日益复杂和法规要求的不断严格,企业面临着越来越多的产品合规挑战。PLM(产品生命周期管理)项目管理软件作为一种强大的工具,能够为企业的产品合规管理提供全方位的支持,助力企…

P1282 多米诺骨牌

链接 https://www.luogu.com.cn/problem/P1282 思路本来的思路是dp[i][j][0/1]表示前i个选j个翻面其中第i个是(1)否(0)翻面。然后递推取min。但是这样很显然会导致类似贪心的问题:只符合前面的局部利益,不符合后续最佳组合。 正确做法: 用dp[i][j]来表示当前考虑到第i个…

矿井人员误入预警防爆系统

燧机科技AI智能矿井人员误入报警防爆系统嵌入AI智能人体识别深度算法,人员误入监测是在带式输送机的重要位置或沿线,安装人体智能分析和越界监测功能的防爆AI智能分析预警摄像机,实时监测识别人员与带式输送机的距离,当摄像机识别到人员与带式输送机的距离发生变化时且进入…

PLM在电子与半导体行业的应用价值

产品生命周期管理(PLM)作为一种先进的管理理念和技术,在电子与半导体行业正发挥着日益重要的作用。随着电子与半导体行业的快速发展,产品更新换代速度加快,市场竞争愈发激烈,企业面临着诸多挑战,如缩短产品上市时间、提高产品质量、降低成本等。而PLM的应用为企业应对这…

htb cicada靶场

htb Cicada靶场笔记 目标:Cicada,IP地址:10.10.11.35 1.信息收集nmap扫描目标端口,打印端口详细信息nmap -sVC 10.10.11.35 nmap -sVC 10.10.11.35 Starting Nmap 7.94SVN ( https://nmap.org ) at 2025-03-26 22:30 EDT Stats: 0:00:50 elapsed; 0 hosts completed (1 up)…

KPI/KSF/360评估/FDM/ARM/BARS六大工具全解析:企业绩效管理方法论与实施

你是否因绩效考核方法难抉择而苦恼?年关将至,HR们最头疼的事非“绩效考核”莫属! 这不只是关系到员工的年终奖和绩效工资,更直接影响到来年的薪资调整和职业晋升。大家都盯着这个结果:谁能拿到那份丰厚的年终奖,谁能涨薪,谁又被“冷冻”了。 对HR来说,如何在这场考核中…

(单调)队列优化多重背包

省流:复杂度是 \(O(NM)\) 的。0 多重背包可以通过枚举选的个数做到 \(O(N^2 M)\)。 转移是 \(f_j=\max(f_{j-k\times w_i}+v_i\times k)\)。 1 注意到你每次转移好像只用到了一部分 \(f_j\),并且 \(j-k\times w_i\) 这个东西 \(j\bmod w_i\) 都相同,考虑将 \(j\bmod w_i\) 相…

关于python枚举的基本用法

简介 关于枚举类型。个人理解就是批量宏定义,并且是自增的id,下面直接写用法; enum用法 创建一个枚举变量 import enum labs_category=enum.Enum("labs_category",("a","b","c"))基本方法直接访问指定枚举对象访问枚举成员的变量名…

基于RK3568 + FPGA国产平台的多通道AD实时采集显示方案分享

在工业控制与数据采集领域,高精度的AD采集和实时显示至关重要。今天,我们就来基于瑞芯微RK3568J + FPGA国产平台深入探讨以下,它是如何实现该功能的。适用开发环境如下:Windows开发环境:Windows 7 64bit、Windows 10 64bitLinux开发环境:Ubuntu18.04.4 64bit、VMware15.5…

vue实现echart图

vue实现echart图<template><div class="analytics-container"> <el-row class="form-row" justify="center" align="middle"><el-col :span="12"><el-form label-width="100px">…

用IDEA从头创建一个jdbc项目修改数据库数据(mysql+navicat)

0. 参考文档[1] https://blog.csdn.net/PIKapikaaaa/article/details/124113065 [2] https://blog.csdn.net/qq_36816794/article/details/141621264 JDBC是java访问数据库的基石,JDO, Hibernate等只是更好的封装了JDBC。 1、创建项目 IDEA新建一个空项目或者空module 选中 ma…