Codeforces Round 1006 (Div. 3)

news/2025/2/26 2:10:32/文章来源:https://www.cnblogs.com/maburb/p/18737628

A. New World, New Me, New Array

题意:你要选\(n\)个值域在\([-p, p]\)之间数, 使得总和恰好为\(k\)

\(k\)\(-k\)都是一样的,那么令\(k=|k|\),每次填\(min(k, p)\),然后\(k = k - min(k, p)\)。就能得到\(k\)。无解的情况就是\(n\times p < k\)

点击查看代码
void solve() {int n, k, p;std::cin >> n >> k >> p;k = std::abs(k);if (p * n < k) {std::cout << -1 << "\n";return;}std::cout << (k + p - 1) / p << "\n";
}

B. Having Been a Treasurer in the Past, I Help Goblins Deceive

题意:一个字符串分为两种字符:'-'和'_'。你可以重排字符串,使得子序列"-_-"最多。

我们应该让'-'放两边,中间放'_'。两边'-'的数量应该越接近越好。

点击查看代码
void solve() {int n;std::cin >> n;std::string s;std::cin >> s;i64 a = std::count(s.begin(), s.end(), '-');i64 b = std::count(s.begin(), s.end(), '_');i64 c = a / 2;std::cout << c * (a - c) * b << "\n";
}

C. Creating Keys for StORages Has Become My Main Skill

题意:你要构造一个数组,使得所有数的或值等于\(x\),并且使得\(mex\)最大。

\(0\)\(n-1\)找最大的前缀或和等于\(x\)的,那么前面填这些数,后面的都填\(x\)就行。

点击查看代码
void solve() {int n, x;std::cin >> n >> x;if (n == 1) {std::cout << x << "\n";return;}std::vector<int> ans(n);int sum = 0, max = 0, val = 0;for (int i = 0; i < n; ++ i) {sum |= i;if ((sum & x) == sum) {max = i;val = sum;}}if (max == n - 1 && (val & x) != x) {-- max;}int i = 0;while (i < n && max >= 0) {ans[i] = max -- ;++ i;}if (i < n) {for (int j = i; j < n; ++ j) {ans[j] = x;}}for (int i = 0; i < n; ++ i) {std::cout << ans[i] << " \n"[i == n - 1];}
}

D. For Wizards, the Exam Is Easy, but I Couldn't Handle It

题意:左移数组的一个区间,使得逆序对最小。

左移一次相当于把\(i\)插到\(j\)的后面,对\([i + 1, j]\)和除\(i\)外的数没有影响。只需要计算这些数和\(i\)对逆序对的影响。那么我们枚举\(i\),然后枚举\(j\),暴力即可。

点击查看代码
void solve() {int n;std::cin >> n;std::vector<int> a(n);	for (int i = 0; i < n; ++ i) {std::cin >> a[i];}int sum = 0;for (int i = 0; i < n; ++ i) {for (int j = i + 1; j < n; ++ j) {if (a[i] > a[j]) {++ sum;}}}int l = 0, r = n - 1;int ans = sum;for (int i = 0; i < n; ++ i) {int v = sum;for (int j = i; j < n; ++ j) {if (a[j] < a[i]) {-- v;} else if (a[j] > a[i]) {++ v;}if (v < ans || (v == ans && r - l > j - i)) {ans = v;l = i, r = j;}}}std::cout << l + 1 << " " << r + 1 << "\n";
}

E. Do You Love Your Hero and His Two-Hit Multi-Target Attacks?

题意:构造不超过\(500\)个点,使得欧几里得距离等于曼哈顿距离的点对恰好为\(k\)个。

这样的点对的\(x\)轴或者\(y\)轴一定相同,如果有\(n\)\(x\)轴相同的,就有\(\frac{n(n-1)}{2}\)的贡献,那么我们一行一行的放,一直到贡献满足\(k\)就行了,注意每次放完一行列坐标得移到上一行最后的右边。

点击查看代码
void solve() {int k;std::cin >> k;std::vector<std::pair<int, int>> ans;int x = -1e9, y = -1e9;while (k) {int z = 0;while ((i64)z * (z + 1) / 2 <= k) {++ z;}k -= z * (z - 1) / 2;for (int i = 1; i <= z; ++ i, ++ x) {ans.push_back({x, y});}y += 1;}std::cout << ans.size() << "\n";for (auto & [x, y] : ans) {std::cout << x << " " << y << "\n";}
}

F. Goodbye, Banker Life

题意:\(f[1][1] = k\)\(f[i][j] = f[i - 1][j] \oplus f[i - 1][j - 1]\)。求第\(n\)行的值。

这题也是人类智慧,不过其实还是有理论的。
感觉递推式感觉应该和杨辉三角有关系,打表发现如果杨辉三角等于位置的数是奇数,那么值就是\(k\),否则是\(0\)。那么就变成了求解\(C(n - 1, i)\)是奇数还是偶数。根据\(Lucas\)定理,在模运算下我们求解\(C(n, k)\),对于一个质数\(p\),可以把\(n, k\)分解为\(p\)进制数,那么答案就是\(p\)进制下对应数做组合数然后每一位的值乘起来。那么发现,如果\(2\)进制下\(n\)的第\(i\)\(n_i\)\(k\)的第\(i\)\(k_i\),如果\(k_i > n_i\),那么值就是\(0\),否则就是\(1\),这意味着\(k\)的二进制表示下的\(1\)必须都在\(n\)里出现,即\(n \& k = k\)

点击查看代码
void solve() {int n, k;std::cin >> n >> k;for (int i = 0; i < n; ++ i) {std::cout << (((n - 1) & i) == i ? k : 0) << " \n"[i == n - 1];}
}

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

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

相关文章

开源一款数据转换扩展板-FreakStudio多米诺系列

数据转换板通过I2C接口进行信号采集和输出,支持最多16通道输入和2通道输出。具备860Hz采样率和50KHz输出频率,采用16位ADC和12位DAC芯片,适用于精确信号采集。小尺寸设计,支持堆叠级联。原文链接: FreakStudio的博客 摘要 数据转换板通过I2C接口进行信号采集和输出,支持最…

【CodeForces训练记录】Codeforces Round 1006 (Div. 3)

训练情况赛后反思 结束前打表看出来了 F 有一点进制的规律,太极限了来不及写了 A题 显然不合法的情况就是所有元素绝对值的和都比和的绝对值小,这种情况无论怎么凑都到不了 \(k\),剩下的就是把和均摊到值域上,除以值域向上取整就是答案点击查看代码 #include <bits/stdc…

西湖论剑2025Misc—cscs

西湖论剑2025cscs详解 Cobalt Strike流量主要是找beacon,主要以两种形式呈现 一小段shellcode(几百个字节),通常叫做stager shellcode,这段代码下载整个的beacon。 一个完全的beacon:一个可以反射性加载的PE文件 先来了解下cs流量的特征 cs流量特征: 1,基础特征:心跳包…

轻松驾驭Docker!Windows Docker Desktop部署Portainer全攻略

轻松驾驭Docker!Windows Docker Desktop部署Portainer全攻略 一、引言 在当今的软件开发领域,Docker 已经成为构建、部署和运行应用的标准之一。它通过容器化技术使得开发者可以轻松地打包应用程序及其依赖,并确保它们可以在任何环境中一致地运行。 为了更好地管理和监控这些…

部署 VS2022 驱动开发环境-解决无法编译驱动的问题

使用 VS2022 安装驱动开发环境,创建默认的驱动项目是无法直接编译出驱动的文件的,需要使用 NuGet 给项目安装【Microsoft.Windows.WDK.x64】1、下载安装 VS2022(最低支持的 WDK 版本:10.0.26100) 下载地址:https://visualstudio.microsoft.com/zh-hans/downloads 1.1 组件选…

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

Q1:遇到的api返回结果数据封装的问题,在老版本的springboot中当实现类的类名和数据库中的类名不一致的是不会自动封装返回,因此返回结果值会显示null,但是在新版貌似已经会自动识别,所以我没有遇到该问题,如果遇到用手动结果映射的方法解决。Q2:在进行前后端联桥时,前端服…

右值引用和移动语义

右值引用(Rvalue reference)和移动语义(Move semantics) 左值(lvalue)和右值(rvalue)左值(也称为 locator value)是一个可以被修改的存储位置,指向内存中的某个位置 例子:变量、数组元素、解引用指针等判断左值的方法是:能够获得这个表达式的引用 或者取地址右值 …

【vulhub】redis 4-unacc (redis未授权访问)

渗透环境 攻击机: IP: 192.168.66.130(Kali) 漏洞收录于:vulhub/redis/4-unacc 涉及知识点:redis未授权访问 影响版本:redis 版本 < 6.x 漏洞的产生条件有以下两点:Redis绑定在0.0.0.0:6379,且没有进行添加防火墙规则避免其他非信任来源ip访问等相关安全策略,直接…

再论支付账务

支付账务是金融领域中复杂且关键的一环,涉及资金流动、风险控制和业务效率等多个方面。本文从支付结算的专业视角出发,深入剖析了支付账务的核心逻辑,包括会计科目设置、对账结算流程以及账务核算的关键要点。学习账务的时候你是否经常有这些疑问“待结算和待清算是什么?为…

分享[清华大学DeepSeek教程全家桶]下载地址

干货分享,最新整理的清华大学DeepSeek教程全家桶,内容如下:内容展示下载地址🎁🎁 文末福利,后台回复[603]获取下载地址 📢📢 喜欢这篇文章?欢迎大家✨关注 ❤️点赞 ➡️转发 分享给那些需要的朋友!如果认为此文对您有帮助,别忘了支持一下哦!声明:本博客原创文…

求二叉搜索树的第 K 小的值

题目:一个二叉搜索树,求其中的第K小的节点值。如下图,第3小的节点是4什么是二叉树:是一棵树   每个节点最多能有 2 个字节点。数据结构如下:{value, left,right}interface ITreeNode {value: number // 或其它类型left?: ITreeNoderight?:ITreeNode }上图中的二叉树结…

百万架构师第四十四课:Nginx:Nginx 的扩展-OpenRestry|JavaGuide

百万架构师系列文章阅读体验感更佳 原文链接:https://javaguide.net 公众号:不止极客 Nginx 的扩展-OpenRestry 课程目标Nginx 进程模型简介Nginx 的高可用方案OpenResty 安装及使用什么是 API 网关?OpenResty 实现灰度发布功能Nginx 进程模型简介 多进程TomcatBIO NIO AION…