VP Educational Codeforces Round 17

news/2025/2/26 15:28:19/文章来源:https://www.cnblogs.com/maburb/p/18738582

A. k-th divisor

题意:找\(n\)的第\(k\)个因子。

数据范围看起来很大,实际上可以暴力找约数,然后排序。

点击查看代码
void solve() {i64 n, k;std::cin >> n >> k;std::vector<i64> a;for (i64 i = 1; i * i <= n; ++ i) {if (n % i == 0) {a.push_back(i);if (n % (n / i) == 0 && i * i != n) {a.push_back(n / i);}}}std::sort(a.begin(), a.end());-- k;if (k < a.size()) {std::cout << a[k] << "\n";} else {std::cout << -1 << "\n";}
}

B. USB vs. PS/2

题意:有两种类型的鼠标,以及一些电脑,有些电脑只能用类型一的鼠标,有些只能用类型二的鼠标,有些都可以用。给出\(n\)个鼠标的类型和价格。你要尽可能满足多的电脑,然后让总价值最小。

把两种类型的鼠标按价格分别排序。然后对应类型的鼠标给对应类型的电脑。有多出来的给可以用两种类型的电脑。

点击查看代码
void solve() {int a, b, c;std::cin >> a >> b >> c;int m;std::cin >> m;std::vector<int> A, B;for (int i = 0; i < m; ++ i) {int v;std::string s;std::cin >> v >> s;if (s == "USB") {A.push_back(v);} else {B.push_back(v);}}std::sort(A.begin(), A.end());std::sort(B.begin(), B.end());i64 sum = 0;int i = 0, j = 0;while (i < A.size() && a) {sum += A[i ++ ];-- a;}while (j < B.size() && b) {sum += B[j ++ ];-- b;}while ((i < A.size() || j < B.size()) && c) {if (i < A.size() && j < B.size()) {if (A[i] < B[j]) {sum += A[i ++ ];} else {sum += B[j ++ ];}} else if (i < A.size()) {sum += A[i ++ ];} else {sum += B[j ++ ];}-- c;}std::cout << i + j << " " << sum << "\n";
}

C. Two strings

题意:给你两个字符串\(a, b\),你要删除\(b\)的一个连续子串,使得\(b\)\(a\)的子序列,使得删除的子串的长度最小。

考虑二分,枚举左端点,因为是子序列,那么如果一个长度为\(mid\)的子串删除后可以满足条件,那么比包括它的比它更长的子串也满足条件。但我们的\(check\)只能是\(O(1)\)的,我们回想匹配子序列的过程,就是取每个字符最靠前的位置,那么这满足了能匹配的最后一个位置一定最靠前。
那么我们可以预处理从前往后匹配到\(b_i\)的最小位置\(L_i\),以及从后往前匹配到\(b_i\)的最大位置\(R_i\)。那么对于给一个子串\([l, r]\),只要\(L_{l-1} < R_{r + 1}\)就能满足条件。

点击查看代码
void solve() {std::string a, b;std::cin >> a >> b;int n = a.size(), m = b.size();std::vector<int> L(m, n), R(m + 1, -1);for (int i = 0, j = 0; i < n; ++ i) {if (a[i] == b[j]) {L[j] = i;++ j;}}for (int i = n - 1, j = m - 1; i >= 0; -- i) {if (a[i] == b[j]) {R[j] = i;-- j;}}if (L[m - 1] != n) {std::cout << b << "\n";return;}auto check = [&](int l, int r) -> bool {if (l == 0) {return r == m - 1 || R[r + 1] != -1;}if (r == m - 1) {return l == 0 || L[l - 1] != n;}return L[l - 1] < R[r + 1];};int ansl = 0, ansr = m - 1;for (int i = 0; i < m; ++ i) {int l = i, r = m - 1;while (l < r) {int mid = l + r >> 1;if (check(i, mid)) {r = mid;} else {l = mid + 1;}}if (check(i, l) && l - i < ansr - ansl) {ansl = i, ansr = l;}}std::string ans = b.substr(0, ansl) + b.substr(ansr + 1);if (ans.empty()) {ans = "-";}std::cout << ans << "\n";
}

D. Maximum path

题意:一个\(3 \times n\)的矩阵,你可以往上下左右走,求从\((1, 1)\)\((3, n)\)的路径总和最大。

如果不能往左走,我们就可以考虑按列\(dp\)\(f[i][j]\)为在\((i, j)\)处的最大值。但现在可以往左走,我们无法处理这个情况,但手画一下发现,只能在第二行往左走,并且任意一种情况都可以转换为只往左走一步的情况。那么\(f[0][j], f[2][j]\)就加上左边这个\(3 \times 2\)的矩形的转移就行了。

点击查看代码
void solve() {int n;std::cin >> n;std::vector a(3, std::vector<i64>(n + 1));for (int i = 0; i < 3; ++ i) {for (int j = 1; j <= n; ++ j) {std::cin >> a[i][j];}}std::vector f(3, std::vector<i64>(n + 1, -1e18));f[0][0] = 0;f[0][1] = a[0][1]; f[1][1] = a[0][1] + a[1][1]; f[2][1] = a[0][1] + a[1][1] + a[2][1];for (int i = 2; i <= n; ++ i) {f[0][i] = std::max({f[0][i - 1] + a[0][i], f[1][i - 1] + a[1][i] + a[0][i], f[2][i - 1] + a[2][i] + a[1][i] + a[0][i]});f[1][i] = std::max({f[0][i - 1] + a[0][i] + a[1][i], f[1][i - 1] + a[1][i],f[2][i - 1] + a[2][i] + a[1][i]});f[2][i] = std::max({f[0][i - 1] + a[0][i] + a[1][i] + a[2][i], f[1][i - 1] + a[1][i] + a[2][i],f[2][i - 1] + a[2][i]});f[0][i] = std::max(f[0][i], f[2][i - 2] + a[2][i - 1] + a[2][i] + a[1][i] + a[1][i - 1] + a[0][i - 1] + a[0][i]);f[2][i] = std::max(f[2][i], f[0][i - 2] + a[0][i - 1] + a[0][i] + a[1][i] + a[1][i - 1] + a[2][i - 1] + a[2][i]);}std::cout << f[2][n] << "\n";
}

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

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

相关文章

振动电阻式传感器测量模块 差动电阻式 驱动与测量RM502

振动电阻式传感器测量模块 差动电阻式 驱动与测量RM502RM502模块是一款高精度、多功能的传感器驱动与测量解决方案。本产品采用先进的模拟信号处理技术,专为差动电阻式传感器及其他高精度电阻测量应用而设计。通过恒流驱动与4路实时电流测量技术,配合高精度采样电阻,有效消除…

No.13 CSS--简介

一、CSS 1.1概念CSS(Cascading Style Sheets)层叠样式表,又叫级联样式表,简称样式表。 CSS文件后缀名为 .css。 CSS用于HTML文档中元素样式的定义。1.2 作用使用css的目的就是让网页具有美观一致的页面。1.3 语法CSS 规则由两个主要的部分构成 : 选择器,以及一条或多条声明(…

Go红队开发—并发编程

Go红队开发之并发编程目录并发编程go协程chan通道无缓冲通道有缓冲通道创建⽆缓冲和缓冲通道等协程sync.WaitGroup同步Runtime包Gosched()Goexit()区别同步变量sync.Mutex互斥锁atomic原子变量SelectTicker定时器控制并发数量核心机制并发编程阶段练习重要的细节端口扫描股票监…

【DeepSeek部署实战】正点原子RK3588开发板本地化部署DeepSeek R1 大模型视频教程来啦!

【视频发布】正点原子RK3588开发板本地化部署DeepSeek R1 大模型视频系列视频教程来啦!一、课程内容 承接上一次板端部署DeepSeek R1大模型的文档教程,应粉丝们的要求,本次推出视频教程,手把手教学实现端侧部署,无需依赖云端服务器即可本地化处理数据,功耗更低、成本更优…

接口新特性--java进阶day03

1.接口新特性 在JDk8和JDK9开始,接口可以定义普通方法这时就会感到很奇怪,明明之前说好接口只是用来制定规则的,为什么现在又可以定义普通方法了呢? 我们以一个公司案例进行讲解,公司1.0上线了接口,之后有新项目,要更新接口,但我们都知道,接口如果写了新的方法,之前所…

MySQL之navicat使用

1、下载navicat 包2、解压 3、找到navicat.exe 4 .密钥:NAVH-WK6A-DMVK-DKW3 5、查看ip地址6、关闭防火墙:ervice iptables stop7、连接配置编写 8、点击确定连接,显示如下 9、打开查询中,新建查询10、解决问题: 注意点:如果连接不上 1、关闭防火墙 service iptables …

Powershell实现圆缩小放大 (实时刷新窗口)

使用Powershell,创建实时刷新的窗口,绘制图形,这里以圆作为例子,做缩小放大动画。【分析】 Powershell是windows内置的自动部署平台,功能强大在于可以调取.net框架,因此,即使没有Opengl加持,也可以创建实时刷新的窗口。可以调用windows.Form程序集创建窗口,然后调用Sy…

LGP8125 [BalticOI 2021] The short shank 学习笔记

LGP8125 [BalticOI 2021] The short shank 学习笔记 Luogu Link 题意简述 有一列 \(N\) 个元素,第 \(i\) 个元素初始值 \(t_i\),而后会被更新为 \(\min_{j=lb=1}^{rb=i} t_j+(i-j)\)。现在给你 \(D\) 个隔板,如果在第 \(i\) 个和第 \(i+1\) 个之间放置,则有效果:\(\forall…

PPO和GRPO算法详解(持续更新中)

PPO 众所周知,PPO在LLM应用下, t时刻下,State就变成了query+output(<t) Reference是初始模型,举个例子可以认为是deepseek V3+SFT之后的模型,是不变的,是fozen model 从头开始推导一次: t0时刻:query输入到policy model里面,生成一个token,记为o1Reeference model…

ATR143B Counting Grids 学习笔记

ATR143B Counting Grids 学习笔记 Luogu Link 题意简述 现在需要将 \(1\sim n^2\) 共 \(n^2\) 个整数填进网格 \(S\)。定义一种方案合法当且仅当不存在 \(S_{i,j}\) 满足: \[\max_{k=1}^n S_{i,k}=\min_{k=1}^n S_{k,j}=S_{i,j} \]。问合法方案数,答案对 \(998244353\) 取模。…

win11解决任务栏卡死问题

1、以管理员方式启动 windows PowerShell 2、执行代码 Get-AppXPackage -AllUsers | Foreach {Add-AppxPackage -DisableDevelopmentMode -Register "$($_.InstallLocation)\AppXManifest.xml"} sfc /scannow出现下面信息重启电脑即可。

轻松搞定电脑文件对比,BeyondCompare

点击上方蓝字关注我 前言 Beyond Compare 是一种文件比较工具。把选中的文件夹或文件并排展示两个窗口,可以使用不同筛选查看文件夹信息。 可以查看所有文件、匹配的文件、不匹配的文件等,根据不同的颜色来区别以便轻松辨识。通过其他功能还包括二进制文件的快速比较、文件和…