Educational Codeforces Round 183 (Rated for Div. 2) A~D

news/2025/10/7 14:21:40/文章来源:https://www.cnblogs.com/Kescholar/p/19128105

A - Candies for Nephews

模拟。

\(3\) 的余数。

点击查看代码
#include <bits/stdc++.h>using namespace std;using i64 = long long;void solve() {int n;std::cin >> n;std::cout << (3 - n % 3) % 3 << "\n";}int main() {ios::sync_with_stdio(false);cin.tie(nullptr);int t;cin >> t;while (t--) {solve();}return 0;
}

B - Deck of Cards

模拟。

手玩可以发现,\(0/1\) 的顺序无所谓,对两边的影响是固定的,除开这些后,\(2\) 会影响剩余的数的两边,当 \(cnt_2 * 2 \ge n\) 的时候,中间全都不确定,否则就左右两边影响 \(cnt_2\) 个。

注意 \(k=n\) 特判,以及是 \(1\) 在上面,所以去掉上面的是从 \(1\) 开始,不是 \(n\)

点击查看代码
#include <bits/stdc++.h>using namespace std;using i64 = long long;void solve() {int n, k;std::cin >> n >> k;std::string s;std::cin >> s;if (k == n) {std::cout << std::string(n, '-') << "\n";return;}int cnt[3] {};for (int i = 0; i < k; i += 1) {cnt[s[i] - '0'] += 1;}std::string ans = "";if (cnt[0]) {ans += std::string(cnt[0], '-');}n -= cnt[0] + cnt[1];if (2 * cnt[2] >= n) {ans += std::string(n, '?');} else {ans += std::string(cnt[2], '?');ans += std::string(n - 2 * cnt[2], '+');ans += std::string(cnt[2], '?');}if (cnt[1]) {ans += std::string(cnt[1], '-');}std::cout << ans << "\n";}int main() {ios::sync_with_stdio(false);cin.tie(nullptr);int t;cin >> t;while (t--) {solve();}return 0;
}

C - Monocarp's String

前缀和,哈希。

\(a/b\) 视为 \(+1/-1\),那么问题就是问删除一个区间使得数组总和为 \(0\)

定义 \(a_i\)\(a/b\) 的贡献,若 \(\sum_{i=1}^na_i = d\),说明我们要找一段区间和等于 \(d\) 的删掉;定义 \(pre_i\) 表示前 \(i\) 个数的和,用哈希表 \(mp\) 记录每个 \(pre_i\) 的下标,如果 \(pre_i-d\) 出现过,说明 \(i-mp[pre_i-d] + 1\) 这一段就是要删掉的,比较一下取最小值即可。

点击查看代码
#include <bits/stdc++.h>using namespace std;using i64 = long long;void solve() {int n;std::cin >> n;std::string s;std::cin >> s;int cnt[2] {};for (int i = 0; i < n; i += 1) {int c = s[i] - 'a';cnt[c] += 1;}int d = cnt[0] - cnt[1];map<int, int> mp;mp[0] = 0;int ans = n, sum = 0;for (int i = 0; i < n; i += 1) {if (s[i] == 'a') {sum += 1;} else {sum -= 1;}if (mp.count(sum - d)) {ans = min(ans, i - mp[sum - d] + 1);}mp[sum] = i + 1;}if (ans == n) {ans = -1;}if (d == 0) {ans = 0;}std::cout << ans << "\n";}int main() {ios::sync_with_stdio(false);cin.tie(nullptr);int t;cin >> t;while (t--) {solve();}return 0;
}

D. Inversion Value of a Permutation

\(dp\)

要求构造一个长度为 $ n $ 的排列,使得其逆序值恰好为 $ k $。逆序值定义为至少包含一个逆序对的连续子数组的数量。实际上,总子数组数为 $ \frac{n(n+1)}{2} $,减去没有逆序对的子数组数(即递增连续子数组数)即为逆序值。因此,问题转化为构造一个排列,使其递增连续子数组数 $ S = \frac{n(n+1)}{2} - k $。

若 $ S $ 无法表示为若干段长度 $ l_i $ 的平方和的一半之和(即 $ \sum \frac{l_i(l_i+1)}{2} = S $,其中 $ \sum l_i = n $),则输出 \(0\)。否则,将排列分成若干连续递增的段,段间递减排列即可。具体构造时,从大到小依次分配段内数字,每段内数字递增。

设 $ dp[x][i][j] $ 表示长度为 $ x $ 的排列中能否用若干段覆盖 $ i $ 个元素且递增子数组数为 $ j $,转移方程为:

\[dp[x][i+l][j + \frac{l(l+1)}{2}] \leftarrow dp[x][i][j] \quad \text{for } l \leq x-i \]

然后根据预处理结果还原方案即可。

点击查看代码
#include <bits/stdc++.h>using namespace std;using i64 = long long;const int N = 30;
bool dp[N + 1][N + 1][500];
int len[N + 1][N + 1][500], lst[N + 1][N + 1][500];void solve() {int n, k;std::cin >> n >> k;int st = n * (n + 1) / 2 - k;if (!dp[n][n][st]) {std::cout << 0 << "\n";} else {std::vector<int> has;int i = n;while (i > 0) {int l = len[n][i][st];has.push_back(l);st = lst[n][i][st];i -= l;}std::reverse(has.begin(), has.end());std::vector<int> ans;int now = 0;for (auto &d : has) {int l = n - now - d + 1;int r = n - now;for (int num = l; num <= r; num++) {ans.push_back(num);}now += d;}for (int i = 0; i < n; i += 1) {std::cout << ans[i] << " \n"[i + 1 == n];}}}int main() {ios::sync_with_stdio(false);cin.tie(nullptr);for (int x = 1; x <= N; x++) {int y = x * (x + 1) / 2;dp[x][0][0] = true;for (int i = 0; i < x; i++) {for (int j = 0; j <= y; j++) {if (!dp[x][i][j]) continue;for (int l = 1; l <= x - i; l++) {int ni = i + l;int nj = j + l * (l + 1) / 2;if (nj <= y) {dp[x][ni][nj] = true;len[x][ni][nj] = l;lst[x][ni][nj] = j;}}}}}int t;cin >> t;while (t--) {solve();}return 0;
}

E. Predicting Popularity

数据结构,晚上补补。

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

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

相关文章

asp.net网站开发实例教程临沂网站建设 百度优化

BP神经网络指传统的人工神经网络&#xff0c;相比于卷积神经网络(CNN)来说要简单些。 人工神经网络具有复杂模式和进行联想、推理记忆的功能, 它是解决某些传统方法所无法解决的问题的有力工具。目前, 它日益受到重视, 同时其他学科的发展, 为其提供了更大的机会。1986 年, Rom…

长春网站建设硕成传媒app制作开发小程序制作开发

​  域名解析是互联网用户接收他们正在寻找的域的地址的过程。更准确地说&#xff0c;域名解析是人们在浏览器中输入时使用的域名与网站IP地址之间的转换过程。您需要站点的 IP 地址才能知道它所在的位置并加载它。但&#xff0c;在这个过程中&#xff0c;可能会出现多种因素…

网站傻瓜式建设品牌维护

文章目录 1. Socket简介2. ServerSocket3. Socket4. 服务器端代码5. 客户端代码 1. Socket简介 Socket&#xff08;Java套接字&#xff09;是Java编程语言提供的一组类和接口&#xff0c;用于实现网络通信。它基于Socket编程接口&#xff0c;提供了一种简单而强大的方式来实现…

外贸网站怎么做效果好平面设计公司怎么找客户

1.1 概述 Spring Boot是由Pivotal团队提供的全新框架&#xff0c;其设计目的是用来简化新Spring应用的初始搭建以及开发过程。习惯优于配置 1.2 为什么使用Spring Boot J2EE笨重的开发、繁多的配置、低下的开发效率、复杂的部署流程、第三方技术集成难度大。 1.3 Spring Bo…

深入解析:SpringBatch+Mysql+hanlp简版智能搜索

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

Cisco vManage漏洞分析:未授权RCE与权限提升完整攻击链

本文详细分析了Cisco vManage中四个关键漏洞的组合利用链,包括SSRF+任意文件写入、未授权文件读取、命令注入和SUID权限提升,最终实现未授权root权限远程代码执行,影响企业SD-WAN基础设施安全。SD-PWN — 第3部分 —…

ps做游戏下载网站seo人员培训

本文由简码编程原创&#xff0c;保留所有版权&#xff0c;转载请注明出处。 本python人工智能爬虫系列教程基于Python3.0版本, 将python结合windows桌面开发工具aardio一起做可视化的开发, 用python做逻辑处理,用aardio做窗口界面, 不用再看着黑黑的python命令行窗口, 有window…

爱建站吧软文广告推广

对python这个高级语言感兴趣的小伙伴&#xff0c;下面一起跟随编程之家 jb51.cc的小编两巴掌来看看吧&#xff01;访问FTP&#xff0c;无非两件事情&#xff1a;upload和download&#xff0c;最近在项目中需要从ftp下载大量文件&#xff0c;然后我就试着去实验自己的ftp操作类&…

铁总建设函网站怎么做招投标网站

看了很多教程&#xff0c;花了1天半的时间装上了&#xff0c;记录下。 前置条件&#xff1a;我安装了VS2015&#xff0c;用来编译工程。 参考资料 官方&#xff1a;http://www.vtk.org/Wiki/VTK/Building 安装&#xff1a;http://blog.csdn.net/Chinamming/article/details/1…

硅芯片创新如何成为云计算成功的关键

本文深入探讨了某中心通过自研芯片技术推动云计算发展的历程,包括Nitro系统、Graviton处理器及机器学习专用芯片的创新,揭示了硅芯片在提升性能、降低功耗方面的核心技术突破。硅芯片创新如何成为云计算成功的关键 某…

东萍象棋 DhtmlXQ UBB 转 中国象棋云库查询 FEN

<html><meta charset="utf-8"> <title>ubb2fen</title> <style> button { font-size:18pt; width:5em } #ta { outline:none } </style> <body> <p><bu…

【开源工具】基于PyQt5工作时长计算器工具开发全解析 - 教程

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

十六、【前端强化篇】完善 TestCase 编辑器:支持 API 结构化定义与断言安装

十六、【前端强化篇】完善 TestCase 编辑器:支持 API 结构化定义与断言安装2025-10-07 14:04 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x…

斑马ZT210碳带及纸张安装教程

1、碳带安装方法说明图:2、纸张安装说明图:3、综合图:4、实物图:

石家庄网站搭建定制vi设计获奖作品

一.概述 1.1 以太网指的是由Xerox公司创建并由Xerox、Intel和DEC公司联合开发的基带总线局域网规范&#xff0c;是当今现有局域网采用的最通用的通信协议标准。以太网络使用CSMA/CD技术。 1.2 以太网在局域网各种技术中占统治性地位。 造价低;是应用最广泛的局域网技术。比令…

DHCP及DNS

dhcp enable //开启dncp ip pool xxx //创建一个叫xxx的地址池 network xxx.xxx mask yyy.yyy//设置地址池的相关参数 gateway-list zzz.zzz//设置地址池的网关 dns-list ddd.ddd//设置地址池的DNS huawei路由器还…

Gitlab Runner 学习

Gitlab Runner 学习 runner下载|安装|启动 下载 # 为您的系统下载二进制文件 sudo curl -L --output /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runne…

代做备案网站专业郑州企业网站建设

文章目录 1. 简介2. 用法1&#xff09;单个 CommandLineRunner2&#xff09;多个 CommandLineRunner 3. 优点4. 缺点总结 CommandLineRunner 是 Spring Boot 提供的一个接口&#xff0c;用于在 Spring Boot 应用程序启动后执行一些任务。通过实现 CommandLineRunner 接口&#…

东莞网站建设设计公司网站怎么添加域名

Redisson 中的 RScoredSortedSet 类是对 Redis 内置的 Sorted Set 数据结构的一个封装&#xff0c;它支持对集合中的元素进行排序&#xff0c;每个元素都有一个与之关联的分数(score)。 RScoredSortedSet 可以用于多种场景&#xff0c;以下是一些常见的使用案例&#xff1a; 排…