VP Codeforces Round 904 (Div. 2)

news/2025/3/4 22:28:04/文章来源:https://www.cnblogs.com/maburb/p/18751656

A. Simple Design

题意:找大于等于\(x\)的第一个数位和是\(k\)的倍数的数。

\(k\)很小,则答案不会大于\(x\)很多。暴力枚举即可。

点击查看代码
void solve() {int n, k;std::cin >> n >> k;for (int i = n; ; ++ i) {int x = i, s = 0;while (x) {s += x % 10;x /= 10;}if (s % k == 0) {std::cout << i << "\n";return;}}
}

B. Haunted House

题意:给你一个\(01\)串,每次你可以移动相邻的两个数,求对于每个\(i\),让\(1 - i\)位都是\(0\)最小操作数。

我们从低到高模拟,我们每次都要移动一段\(1\),那么我们记录\(1\)的数量,当遇到一个零的时候就代表前面这些1都需要移动一次使得\(cnt_1\)位是0。

点击查看代码
void solve() {int n;std::cin >> n;std::string s;std::cin >> s;std::vector<i64> ans(n, -1);i64 sum = 0, cnt = 0;for (int i = n - 1; i >= 0; -- i) {if (s[i] == '1') {++ cnt;} else {sum += cnt;ans[i + cnt] = sum;}}std::reverse(ans.begin(), ans.end());for (int i = 0; i < n; ++ i) {std::cout << ans[i] << " \n"[i == n - 1];}
}

C. Medium Design

题意:选一些线段,每个线段使得一个区间的数加一。使得最大值减最小值最大。

一个错误的贪心是先求一个最大值的位置,然后不包含这个位置的线段都不选,然后求出来最小值。
这个的\(hack\)\(m = 3, (1, 2), (1, 2), (2, 3), (2, 3), (3, 3)\)。发现不选所有的\((1, 2)\)答案是\(3\),但按照这个贪心不能求出正确答案。
正确思路是记录每个点包含它的线段,以及包含它的线段完整包含了几次整个区间。可以先按线段左端点排序,然后枚举点一个一个线段加,在用个优先队列存右端点,每次删去不合法的对头。
注意需要离散化。

点击查看代码
void solve() {int n, m;std::cin >> n >> m;std::vector<std::pair<int, int>> a(n);std::vector<int> b;for (int i = 0; i < n; ++ i) {	int l, r;std::cin >> l >> r;a[i] = {l, r};b.push_back(l);b.push_back(r);}b.push_back(1);b.push_back(m);std::sort(b.begin(), b.end());b.erase(std::unique(b.begin(), b.end()), b.end());auto get = [&](int x) -> int {return std::lower_bound(b.begin(), b.end(), x) - b.begin() + 1;};int k = b.size();std::vector<int> d(k + 2);for (auto & [l, r] : a) {l = get(l), r = get(r);}std::sort(a.begin(), a.end());using PII = std::pair<int, int>;std::priority_queue<PII, std::vector<PII>, std::greater<PII>> heap;int pre = 0, suf = 0;int ans = 0;for (int i = 1, j = 0; i <= k; ++ i) {while (heap.size() && heap.top().first < i) {if (heap.top().second == 1) {-- pre;}heap.pop();}while (j < n && a[j].first == i) {if (a[j].first == 1) {++ pre;}if (a[j].second == k) {++ suf;}heap.push({a[j].second, a[j].first});++ j;}ans = std::max(ans, (int)heap.size() - std::min(pre, suf));}std::cout << ans << "\n";
}

D. Counting Rhyme

题意:求\(n\)个数里有多少对数没有共同的因子出现在这些数里面。

\(a_k | a_i, a_k | a_j\)\(a_k | (a_i, a_j)\)
那么我们枚举最大公约数,记\(g_i\)为有多少对数的最大公约数是\(i\)的数量,\(cnt_i\)\(i\)的倍数的数量。
那么有\(g_i = \frac{cnt_i(cnt_i - 1)}{2} - \sum_{i | j} g_j\)。对于一个数\(x\),如果它出现过则所有最大公约数是\(x\)倍数的对都不能选。

点击查看代码
void solve() {int n;std::cin >> n;std::vector<i64> cnt(n + 1), st(n + 1);for (int i = 0; i < n; ++ i) {int x;std::cin >> x;++ cnt[x];st[x] = 1;}std::vector<i64> g(n + 1);for (int i = 1; i <= n; ++ i) {for (int j = i + i; j <= n; j += i) {cnt[i] += cnt[j];}}for (int i = n; i >= 1; -- i) {g[i] = cnt[i] * (cnt[i] - 1) / 2;for (int j = i + i; j <= n; j += i) {g[i] -= g[j];}}for (int i = 1; i <= n; ++ i) {if (st[i]) {for (int j = i; j <= n; j += i) {g[j] = 0;}}}i64 ans = std::accumulate(g.begin(), g.end(), 0ll);std::cout << ans << "\n";
}

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

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

相关文章

web开发 辅助学习管理系统开发日记 day8

今日完成员工上传头像功能,删除员工功能,以及调试阿里云oss服务器。 Q1:如何配置阿里云服务器 1.创建阿里云服务器并且搭建好配置 2.引入依赖 在oss简介首页引入 3.从官网复制粘贴出上传文件这个功能所在工具类 4.在控制层里面进行上传 Q2 批量删除员工功能 1.在controller层…

pycharm添加conda环境的解释器时找不到python.exe

pycharm添加conda环境的解释器时找不到python.exe 先找到 anaconda 安装目录下的 condabin/conda ,然后加载环境, 加载之后下面就有了conda环境,可以进行选择

md5.exe WriteUp

WriteUp 题目信息 名称:md5.exe 分类:Reverse 描述:找到程序的flag题目链接: https://pan.baidu.com/s/1u8bGbKcUF6_gLaw63L3jyA?pwd=h8r5 提取码: h8r5解题思路 首先用DIE查看该文件,发现该文件没有壳,且是32位exe文件。所以可以直接用32位IDA打开该文件,并按F5对main函…

xor.exe WriteUp

WriteUp 题目信息 名称:xor.exe 分类:Reverse 描述:找到程序的flag题目链接: https://pan.baidu.com/s/1u8bGbKcUF6_gLaw63L3jyA?pwd=h8r5 提取码: h8r5解题思路 首先用DIE查看该文件,发现该文件没有壳,且是32位exe文件。所以可以直接用32位IDA打开该文件,并按F5对main函…

原型链图

啥都不说,先上图:上面展示了各个对象之间是怎样通过显式原型(prototype)及隐式原型([[prototype]],通过__proto__访问)来串联起来的。

【C++库函数】C++生成高质量随机数的方法

#include <iostream> #include <random>int main() {// 第一步:初始化真随机种子(使用硬件熵源)std::random_device rd; // 第二步:选择高性能引擎(推荐 mt19937)std::mt19937 gen(rd()); // 用 random_device 的输出来种子初始化引擎// 第三步:定义分布(…

20250305

1 烧碱的C浪回调后 开始布局中线多单。

玄机靶场通关(持续更新)

穷,没钱开靶场,全是看网上WP尝试自学。 你这应急响应,还真是高高在上呢……玄机靶场通关 全部要VIP,所以穷鬼我要看别人的WP来学 Windows应急-应急与研判训练计划一 服务器场景操作系统 Windows 服务器账号密码 administrator P@ssw0rd 题目来源公众号 ©州弟学安全 任…

代码在线运行工具网站神器——OneCompiler,程序员必备!

今天给大家分享一款功能强大的代码在线运行工具网站——OneCompiler,它可以让你轻松实现代码的编写、运行和分享。 网址 OneCompiler目前已经被收录在【3M万能在线工具箱】的【编程开发】工具中,这里也提供大家直接的网址: OneCompiler:https://onecompiler.com/ 支持70多种…

OV5640摄像头驱动学习

简介: OV5640的功能框架如图:增益放大器(AMP)以及ISP等可以通过寄存器(registers)来配置,配置寄存器的接口就是SCCB接口,该接口协议兼容IIC协议。 SCCB (Serial Camera Control Bus)串行摄像头控制总线。该总线控制着摄像头大部分的功能,包括图像数据格式、分辨率以…

基于PID控制器的双容控制系统matlab仿真

1.课题概述 基于PID控制器的双容控制系统matlab仿真,仿真输出PID控制下的水位和流量两个指标。2.系统仿真结果 (完整程序运行后无水印) 3.核心程序与模型 版本:MATLAB2022a% 绘制结果图形 t1 = 0:1:times; t2 = 0:1:(times-1); hmax = 23*ones(1,times); % 硬约…

【APP逆向37】hook失败之ptrace占坑

现象使用attach方式hook,frida -UF -l hook.js原因unable to access process with pid 17124 due to system restrictions; try `sudo sysctl kernel.yama.ptrace_scope=0`, or run Frida as root这是ptrace占坑的标志。ptrace可以让一个进程监视和控制另一个进程的执行,并且…