Codeforces Round 1060 (Div. 2)

news/2025/10/20 1:54:23/文章来源:https://www.cnblogs.com/maburb/p/19151668

A. Notelock

题意:一个二进制串,问有多少位置的前\(k-1\)个位置没有\(1\)

从前往后扫,维护一个可以包含的最右位置就行。

点击查看代码
#include <bits/stdc++.h>using i64 = long long;void solve() {int n, k;std::cin >> n >> k;std::string s;std::cin >> s;int ans = 0;for (int i = 0, j = 0; i < n; ++ i) {if (i >= j && s[i] == '1') {++ ans;}if (s[i] == '1') {j = std::max(j, i + k);}}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;
}

B. Make it Zigzag

题意:一个数组,要求偶数位置大于左右两个位置。你可以做两个操作,一种是使得\(a_i\)等于前缀最大值,一种是使得\(a_i\)减一。求第二种操作的最小操作个数。

可以先把每个偶数位置做一次操作\(1\)。这样每个偶数位置已经达到最优了。然后遍历每个偶数位置让前后位置小于它即可。

点击查看代码
#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];}i64 ans = 0;for (int i = 0, max = 0; i < n; ++ i) {max = std::max(max, a[i]);if (i & 1) {a[i] = max;}}for (int i = 1; i < n; i += 2) {if (a[i - 1] >= a[i]) {ans += a[i - 1] - (a[i] - 1);}if (i + 1 < n && a[i + 1] >= a[i]) {ans += a[i + 1] - (a[i] - 1);a[i + 1] = a[i] - 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;
}

C. No Cost Too Great

题意:两个长度为\(n\)的数组\(a, b\)。你每次可以使得\(a_i\)加一,花费\(b_i\)。求使得\(a\)中至少有两个元素的\(gcd\)大于\(1\)的最小花费。

先质数筛一下,然后求出每个数的质因子,如果有两个数有相同的质因子直接就\(ok\)
否则看有没有偶数,如果有的话,那么就只有一个偶数,可以让奇数里花费最小的加一变成偶数。或者把这个偶数变成某个奇数的一个质因子的倍数,枚举质因子计算贡献即可。
如果没有偶数,那么可以拿花费最小的两个奇数加一。然后其它操作如果想小于这个操作,任意两个数的花费肯定大于等于这个花费,那么只有一个数操作一次或者两次的情况可能小于等于这个花费,那么枚举每个数加一次或者两次有没有质因子是其它数有的。最后最小花费的数可以操作多次,这个和前面的偶数情况一样计算贡献即可。

点击查看代码
#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<int> a(n), b(n);for (int i = 0; i < n; ++ i) {std::cin >> a[i];}for (int i = 0; i < n; ++ i) {std::cin >> b[i];}std::map<int, int> cnt;for (auto x : a) {while (x > 1) {int p = minp[x];if (++ cnt[p] > 1) {std::cout << 0 << "\n";return;}while (x % p == 0) {x /= p;}}}i64 ans = 0;if (cnt.contains(2)) {int pos = -1, minv = 2e9;for (int i = 0; i < n; ++ i) {if (a[i] % 2 == 0) {pos = i;} else {minv = std::min(minv, b[i]);}}ans = minv;for (auto & [p, _] : cnt) {if (a[pos] % p != 0) {ans = std::min(ans, (i64)b[pos] * ((i64)(a[pos] + p - 1) / p * p - a[pos]));}}} else {std::vector<std::pair<int, int>> c;for (int i = 0; i < n; ++ i) {c.emplace_back(b[i], a[i]);}std::ranges::sort(c);ans = c[0].first + c[1].first;for (int i = 0; i < n; ++ i) {int x = a[i] + 1;if (b[i] >= ans) {continue;}while (x > 1) {int p = minp[x];if (a[i] % p != 0 && cnt.contains(p)) {ans = b[i];break;}while (x % p == 0) {x /= p;}}}for (int i = 0; i < n; ++ i) {int x = a[i] + 2;if (2 * b[i] >= ans) {continue;}while (x > 1) {int p = minp[x];if (a[i] % p != 0 && cnt.contains(p)) {ans = 2 * b[i];break;}while (x % p == 0) {x /= p;}}}int min = c[0].second, v = c[0].first;for (auto & [p, _] : cnt) {if (min % p != 0) {ans = std::min(ans, (i64)v * ((i64)(min + p - 1) / p * p - min));}}}std::cout << ans << "\n";
}int main() {std::ios::sync_with_stdio(false), std::cin.tie(0), std::cout.tie(0);int t = 1;sieve(2e5 + 5);std::cin >> t;while (t -- ) {solve();}return 0;
}

D. Catshock

题意:一棵树,一开始猫在\(1\)点,要去\(n\)点,有两个指令,第一个是让猫随机移动到当前点的一个邻点,一个是把\(u\)的邻边都断掉。给出不超过\(3n\)的指令,使得不管怎样猫最后停留在\(n\)点。第二个指令不能连续使用。

\(1\)出发\(dfs\)一下,求出每个点到\(1\)的距离的奇偶性,和\(1\)\(n\)路径上的点。
用两个大根堆分别存不在路径上的奇数距离和偶数距离的点,按照他们的距离排序。然后按时间奇偶性看,如果当前最大距离的奇偶性不是当前时间的奇偶性,那么猫一定不在当前最远的点上,则可以把这个点删掉,如此循环把所有非路径上的点删掉。
然后只剩下路径上的点,从头到尾一样操作即可。

点击查看代码
#include <bits/stdc++.h>using i64 = long long;void solve() {int n;std::cin >> n;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);}std::vector<int> path;std::set<int> S;std::vector<int> d(n);auto dfs = [&](auto && self, int u, int fa) -> bool {bool flag = false;for (auto & v : adj[u]) {if (v == fa) {continue;}d[v] = d[u] + 1;if (self(self, v, u)) {flag = true;}}if (u == n - 1 || flag) {path.push_back(u);S.insert(u);return true;}return false;};dfs(dfs, 0, -1);std::priority_queue<std::pair<int, int>> heap[2];for (int i = 0; i < n; ++ i) {if (!S.contains(i)) {heap[d[i] & 1].emplace(d[i], i);}}std::vector<std::pair<int, int>> ans;int cnt = n - S.size();int i = 0;for (; cnt; ++ i) {int x = i % 2 ^ 1;if (heap[x].size()) {if (heap[x ^ 1].size() && heap[x ^ 1].top().first > heap[x].top().first) {} else {int u = heap[x].top().second;heap[x].pop();ans.emplace_back(2, u);-- cnt;}}ans.emplace_back(1, -1);}std::ranges::reverse(path);path.pop_back();int f = 0;for (auto & x : path) {if (f) {ans.emplace_back(1, -1);f = 0;++ i;}while (d[x] % 2 == i % 2) {ans.emplace_back(1, -1);++ i;}ans.emplace_back(2, x);f = 1;}std::cout << ans.size() << "\n";for (auto & [x, u] : ans) {if (x == 1) {std::cout << 1 << "\n";} else {std::cout << 2 << " " << u + 1 << "\n";}}std::cout << "\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/940722.shtml

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

相关文章

https://img2024.cnblogs.com/blog/3001825/202510/3001825-20251020014716729-439844091.png

用一个简单的比喻来帮助你理解:“如何完成一顿饭?” 1. 面向过程 (Procedural Oriented) 核心思想:关注“步骤”和“流程”。 这就像你拿到一份菜谱。你必须严格按照步骤来执行: 第一步:洗菜。 第二步:切菜(把土…

Luogu P14260 期待(counting) 题解 [ 蓝 ] [ 前缀和 ] [ 组合计数 ]

期待:按照部分分一步一步去想应该是不难出正解的,这题难点应该在于实现上。 看到题感觉不太好直接入手,于是先考虑特殊性质。特殊性质 A 的做法比较神秘,特殊性质 B 就是个骗分的,没啥启发性。 而特殊性质 C 是真…

golang unique包和字符串内部化

最近在做老系统优化,正好遇到了需要使用字符串内部化的场景,所以今天就来说说字符串内部化这种优化技巧。 什么是字符串内部化 熟悉Java或者python的开发者应该对“内部化”这种技术不陌生。内部化指的是对于内容完全…

EasySQLite 升级到.slnx 格式后的性能优化效果解析

一、升级动因与行业趋势 1.1 传统.sln 文件的技术瓶颈 在.NET 开发领域,解决方案文件 (.sln) 长期作为项目管理核心,但二十余年未变的自定义文本格式逐渐显现技术瓶颈。该格式包含大量重复配置信息与 GUID 引用,简单…

mochi-mqtt/server golang mqtt 包

mochi-mqtt/server golang mqtt 包最近在学习nats 的mqtt 能力,默认nats mqtt 的实现是3.1.1 的,同时想着集成nanomq 的bridge 进行桥接实现共享订阅的能力,但是发现有一个兼容的问题,似乎是nanomq 在发送3.1.1 协…

有了异步i/o的话,还需要协程么

1、异步 I/O 和协程区别 这个其实触及了高并发架构的底层原理:“异步 I/O 和协程有什么区别?如果我已经用异步 I/O(如 NIO、Netty、epoll),还需要协程吗?”我们来一步步拆开讲清楚(这题很多人理解偏差)👇一、…

永久暂停window10更新,不想更新到window11

视频:https://www.bilibili.com/video/BV1jsTMz9EUz?t=144.0 饱受自动更新之苦,现提供一个3分钟可以“永久”关闭Windows更新的思路。具体步骤: 1、Win+R,regedit打开注册表编辑器; 2、找到路径HKEY_LOCAL_MACHI…

102302148谢文杰第一次数据采集作业

第一题 核心代码与运行结果点击查看代码 import requests from bs4 import BeautifulSoup# 目标URL:2020年中国大学排名页面 url="http://www.shanghairanking.cn/rankings/bcur/2020" response=requests.g…

算法第二章作业

找第 k 小的数的分治算法自然语言描述: 找第 k 小的数的分治算法,首先要选择一个基准元素,然后将数组分成两部分,一部分是小于等于基准元素的数,另一部分是大于基准元素的数。假设基准元素在划分后位于数组的第 m…

完全免费的 claude 工具,真香!

完全免费的 claude 工具,真香!刚把我这段时间用 puter 搭的一个 Claude 对话小工具上线了,免费的。 它不是那种“神乎其神”的产品,但确实帮我写方案、理思路、看代码,节省了很多来回搜索的时间。 登录即可使用,…

RaspberryPi 个人服务搭建

# RaspberryPi 个人服务搭建 > 树莓派及其他debian衍生版本服务> > 版本:Linux debian 6.12.48+deb13-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.12.48-1 (2025-09-20) x86_64 GNU/Linux> > 日期:2025年…

tryhackme-预安全-网络如何工作-网站如何工作-11

tryhackme-Pre Security-How The Web Works-How Websites Work 房间地址:https://tryhackme.com/room/howwebsiteswork 这是网络安全入门的基础模块的计算机科学基础知识:How Websites Work(网站如何工作),序号 0…

2025塑料托盘优质厂家推荐,力森塑业科技多元化产品满足各类需求!

2025塑料托盘优质厂家推荐,力森塑业科技多元化产品满足各类需求!随着物流仓储行业的快速发展,塑料托盘作为重要的物流工具,其市场需求日益增长。然而,当前塑料托盘领域面临着诸多技术挑战,这些问题不仅影响了产品…

嵌入式实验3串口通信--任务二USART1通信

1)STM32系统给上位机(win10)连续发送“hello windows!”,win10采用“串口助手”工具接收。如果STM32的连续发送之间不加延时语句,观察win10端是否出现接收数据丢失的现象。 1.1在STM32CubeMX中建立一个新的工程。…

[SSH] sftp 基于SSH的交互式文件传输工具

[SSH] sftp 基于SSH的交互式文件传输工具$(".postTitle2").removeClass("postTitle2").addClass("singleposttitle");目录01 背景1.1 简介1.2 sftp 与 ftp 的对比1.3 sftp 与 scp 适用场…

java.math 包详解

java.math 包详解java.math 包是 Java 提供的用于高精度数学计算的工具包,主要包含两个核心类:BigInteger 和 BigDecimal。这些类用于处理超出基本数据类型范围的数值运算。 1. BigInteger 类BigInteger 用于表示任意…

Drive Snapshot

Drive SnapshotAcronis True ImageATI老版本非常棒

Python接入A股level2千档盘口和逐笔委托

Python接入A股level2千档盘口和逐笔委托本文将以实际的代码实践为例,探讨如何通过一套集成了A股基础行情、Level-2高速行情WebSocket接口、量化交易接口与金融数据库的服务,来系统性地解决这些问题。你将看到如何用简…

20232319 2025-2026-1 《网络与系统攻防技术》实验二实验报告

一、实验内容 1.实践目标 (1)使用netcat获取主机操作Shell,cron启动某项任务(任务自定) PS:cron是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程 (2)使用socat获取主机操作Shell, 任务计划启动…

刷题日记—洛谷循环题单

1.数学思想在算法题中的应用: 2.回文数的判定: