Codeforces Round 1006 Div3 A-E
A
题目描述
夏目章人(Natsume Akito)刚刚在一个新世界苏醒,便立即收到了他的第一个任务!系统为他提供了一个包含 n 个零的数组 a,以及两个整数 k 和 p。在每次操作中,章人需要选择两个整数 i 和 x(满足 1≤i≤n 且 −p≤x≤p),然后执行赋值操作 ai=x。
章人仍未完全适应如何控制他的新身体,因此请你帮他计算使数组所有元素之和等于 k 所需的最少操作次数,或者告诉他这是不可能的。
输入格式
第一行输入包含一个整数 t(1≤t≤1000)—— 测试用例的数量。
每个测试用例的唯一一行包含三个整数 n, k, p(1≤n≤50,−2500≤k≤2500,1≤p≤50)—— 分别表示数组长度、目标总和以及可替换数值的范围边界。
输出格式
对于每个测试用例,输出使数组最终总和为 k 所需的最少操作次数;若无法达成,则输出 −1。
输入输出样例
输入 #1复制
8 21 100 10 9 -420 42 5 -7 2 13 37 7 10 0 49 1 10 9 7 -7 7 20 31 1
输出 #1复制
10 -1 4 6 0 -1 1 -1
说明/提示
第五个样例中,数组初始总和为零,因此无需任何操作。
第六个样例中,数组能达到的最大总和为 9(将唯一元素赋值为 9),因此无法通过任何操作得到总和 10。
第七个样例中,仅需一次操作 a3=−7 即可达成目标。
翻译由 DeepSeek R1 完成
#include <bits/stdc++.h>#define ll long long
#define PII pair<int, int>
#define Tu tuple<int, int, int>using namespace std;int t;
int n, k, p;void solve()
{cin >> n >> k >> p;if(n * p < abs(k)){cout << -1 << endl;return;}cout << abs(k) / p + (abs(k) % p != 0) << endl;
}signed main()
{ios::sync_with_stdio(false);cin.tie(nullptr);cin >> t;while(t --){solve();}return 0;
}
B
题目描述
完成第一个任务后,章人(Akito)离开了初始洞穴。不久后,他偶然发现了一个哥布林村落。
由于章人无处可居,他想了解房屋的价格。众所周知,哥布林将数字写作由字符 '-' 和 '_' 组成的字符串,字符串 s 所表示的数值等于其所有等于字符串 "-_-" 的不同子序列 ∗ 的数量(这与哥布林的面部特征非常相似)。
例如,字符串 s= "-_--_-" 表示的数值为 6,因为它包含 6 个 "-_-" 子序列:
- s1+s2+s3
- s1+s2+s4
- s1+s2+s6
- s1+s5+s6
- s3+s5+s6
- s4+s5+s6
最初,哥布林在回答章人的问题时随机写了一个字符串数值 s,但随后他们意识到想要从旅行者身上获取尽可能多的黄金。为此,他们要求你重新排列字符串 s 中的字符,使得该字符串所表示的数值最大化。
∗ 字符串 a 的子序列是指通过删除 a 中若干(可能为 0)个字符后得到的字符串 b。若两个子序列是通过删除不同位置的字符得到的,则它们被视为不同的子序列。
输入格式
第一行包含一个整数 t(1≤t≤104)—— 测试用例的数量。
每个测试用例的第一行包含一个整数 n(1≤n≤2⋅105)—— 哥布林所写字符串的长度。
每个测试用例的第二行包含一个长度为 n 的字符串 s,仅由字符 '-' 和 '_' 组成——哥布林所写的字符串。
保证所有测试用例的 n 之和不超过 2⋅105。
输出格式
对于每个测试用例,输出一个整数——在最优重排字符串 s 后,等于字符串 "-_-" 的子序列的最大数量。
输入输出样例
输入 #1复制
8 3 --_ 5 __-__ 9 --__-_--- 4 _--_ 10 _-_-_-_-_- 7 _------ 1 - 2 _-
输出 #1复制
1 0 27 2 30 9 0 0
说明/提示
第一个测试用例中,最优方案是将字符重排为 "-_-"。这是唯一一个长度为 3 且至少包含一个 "-_-" 子序列的字符串。
第二个测试用例中,只有一个字符 "-",而构成子序列 "-_-" 至少需要两个 "-"。这意味着无论如何重排,答案都是 0。
第七和第八个测试用例中,字符串长度 n<3,这意味着长度为 3 的子序列不存在。
翻译由 DeepSeek R1 完成
最优方案一定是把 "_" 全部放中间, “-” 放两边。答案就是左边的板子数 * 中间的板子数 * 右边的板子数,中间的板子数一定是确定的,那么考虑一下两边放多少数量,其实就是一个基本不等式,尽量让两边板子数相等
代码
#include <bits/stdc++.h>#define ll long long
#define PII pair<int, int>
#define Tu tuple<int, int, int>using namespace std;int t, n;void solve()
{cin >> n;int up = 0, down = 0;for(int i = 0;i < n;i ++){char ch;cin >> ch;if(ch == '_') down ++;else up ++;}if(up < 2 || down < 1){cout << 0 << endl;return;}ll ans = 0;if(up & 1) ans = (ll)up / 2 * (up / 2 + 1) * down;else ans = (ll)up / 2 * up / 2 * down;cout << ans << endl;
}signed main()
{ios::sync_with_stdio(false);cin.tie(nullptr);cin >> t;while(t --){solve();}return 0;
}
C
题目描述
Akito 仍然无处可住,而小房间的价格却居高不下。为此,Akito 决定在银行找一份为存储设备创建密钥的工作。
在这个魔法世界中,一切都与众不同。例如,代码为 (n,x) 的存储设备的密钥是一个满足以下条件的长度为 n 的数组 a:
- a1∣a2∣a3∣…∣an=x,其中 a∣b 表示数 a 和 b 的按位或运算。
- MEX({a1,a2,a3,…,an}) ∗ 在所有满足条件的数组中达到最大值。
Akito 勤奋地工作了几个小时,但突然头痛发作。请代替他工作一小时:对于给定的 n 和 x,创建任意一个满足代码为 (n,x) 的存储设备的密钥。
∗ MEX(S) 是满足以下条件的最小非负整数 z:z 不在集合 S 中,且所有满足 0≤y<z 的 y 都在集合 S 中。
输入格式
第一行包含一个数 t(1≤t≤104)——测试用例的数量。
每个测试用例的唯一一行包含两个数 n 和 x(1≤n≤2⋅105,0≤x<230)——数组的长度和按位或运算的目标值。
保证所有测试用例的 n 之和不超过 2⋅105。
输出格式
对于每个测试用例,输出 n 个整数 ai(0≤ai<230)——满足所有条件的密钥数组元素。
如果存在多个符合条件的数组,输出其中任意一个即可。
翻译由 DeepSeek R1 完成
输入输出样例
输入 #1复制
9 1 69 7 7 5 7 7 3 8 7 3 52 9 11 6 15 2 3
输出 #1复制
69 6 0 3 4 1 2 5 4 1 3 0 2 0 1 2 3 2 1 0 7 0 6 1 5 2 4 3 0 52 0 0 1 8 3 0 9 11 2 10 4 0 3 8 1 2 0 3
这题属于想到一眼出,想不到卡很久。
思路:贪心,由于求最大的mex,所以从 0 - n 去枚举,每一次检查 i 是否会对异或值产生影响,也就是 x | i == i 才行,最后如果异或值不等于 x 把最后一位改成 x 即可
代码
#include <bits/stdc++.h>#define ll long long
#define PII pair<int, int>
#define Tu tuple<int, int, int>using namespace std;int T, n, w;int lowbit(int x)
{return x & -x;
}void solve()
{cin >> n >> w;if(n == 1){cout << w << endl;return;}vector<int> ans(n);int s = 0;for(int i = 0;i < n;i ++) if((i | w) == w){ans[i] = i;s |= i;}if(s != w) ans[n - 1] = w;for(auto x : ans)cout << x << " ";cout << endl;
}signed main()
{ios::sync_with_stdio(false);cin.tie(nullptr);cin >> T;while(T --){solve();}return 0;
}
D
题目描述
Akito 厌倦了在银行当普通锁匠的工作,因此他决定进入魔法学院并成为世界上最强的巫师!然而,为了入学,他需要解决考试中的唯一一道题目,而这位雄心勃勃的英雄却未能成功。
题目给出一个长度为 n 的数组 a。Akito 需要在使用恰好一次咒语后,使数组中的逆序对数量 ∗ 最小化。咒语的使用方式很简单:Akito 必须选择两个数 l 和 r(满足 1≤l≤r≤n),并对子数组 [l,r] 进行一次向左循环移位。
更正式地说,Akito 选择子数组 [l,r] 并按以下方式修改数组:
- 原始数组为 [a1,a2,…,al−1,al,al+1,…,ar−1,ar,ar+1,…,an−1,an],修改后的数组变为 [a1,a2,…,al−1,al+1,al+2,…,ar−1,ar,al,ar+1,…,an−1,an]。
Akito 渴望开始他的学习,但他仍未通过考试。请帮助他入学并解决这道题目!
∗ 在长度为 m 的数组 b 中,逆序对被定义为满足 1≤i<j≤m 且 bi>bj 的索引对 (i,j)。例如,在数组 b=[3,1,4,1,5] 中,逆序对为索引对 (1,2)、(1,4) 和 (3,4)。
输入格式
输入的第一行包含一个数 t(1≤t≤104)——测试用例的数量。
每个测试用例的第一行包含一个数 n(1≤n≤2000)——数组 a 的长度。
每个测试用例的第二行包含 n 个数 ai(1≤ai≤2000)——数组 a 的元素。
保证所有测试用例的 n2 之和不超过 4⋅106。
输出格式
对于每个测试用例,输出两个数 l 和 r(1≤l≤r≤n)——选择的子数组边界,使得应用咒语后数组的逆序对数量最小。
如果存在多个符合条件的边界对,可以输出其中任意一个。
输入输出样例
输入 #1复制
9 7 1 4 3 2 5 3 3 6 1 4 3 2 5 3 8 7 6 5 8 4 3 2 1 10 1 1 1 5 1 1 5 6 7 8 2 1337 69 4 2 1 2 1 3 998 244 353 3 1 2 1 9 1 1 2 3 5 8 13 21 34
输出 #1复制
2 7 2 4 1 8 4 6 1 2 1 4 1 3 2 3 5 5
说明/提示
在第一个示例中,数组 [1,4,3,2,5,3,3] 将变为 [1,3,2,5,3,3,4]。其中的逆序对为 (2,3)、(4,5)、(4,6) 和 (4,7)。可以证明无法获得少于 4 个逆序对。
在第二个示例中,数组 [1,4,3,2,5,3] 将变为 [1,3,2,4,5,3]。其中的逆序对为 (2,3)、(4,6) 和 (5,6)。选择 l=2 和 r=6 同样有效,此时数组变为 [1,3,2,5,3,4],其中也有 3 个逆序对:(2,3)、(4,5) 和 (4,6)。可以证明无法获得少于 3 个逆序对。
在第四个示例中,选择 l=4 和 r=6 将数组变为 [1,1,1,1,1,5,5,6,7,8]。该数组已排序,因此没有逆序对。
在最后一个示例中,数组初始时已排序,因此对长度至少为 2 的段进行任何操作只会增加逆序对的数量。
翻译由 DeepSeek R1 完成
这个数据范围直接暴力就行
代码
#include <bits/stdc++.h>#define ll long long
#define PII pair<int, int>
#define Tu tuple<int, int, int>using namespace std;int T, n;void solve()
{cin >> n;vector<int> a(n);for(auto &x : a)cin >> x;int cnt = 0, l = -1, r = -1;for(int i = 0;i < n - 1;i ++){int t = 0, ed;for(int j = i + 1;j < n;j ++){if(a[j] < a[i]) t ++, ed = j;else if(a[j] > a[i]) t --;if(t > cnt){cnt = t;l = i, r = ed;}}}if(l == -1) cout << 1 << " " << 1 << endl;else cout << l + 1 << " " << r + 1 << endl;
}signed main()
{ios::sync_with_stdio(false);cin.tie(nullptr);cin >> T;while(T --){solve();}return 0;
}
E
题目描述
Akito 决定学习一个强大的新咒语。由于这个咒语拥有无可估量的力量,它必然需要大量空间和精心准备。为此,Akito 来到了一片空地。我们将这片空地表示为一个笛卡尔坐标系。
为了施展咒语,Akito 需要在空地的不同整数坐标处放置 0≤n≤500 根法杖,使得恰好存在 k 对 (i,j) 满足 1≤i<j≤n 且 ρ(i,j)=d(i,j)。
这里,对于两个整数坐标点 a=(xa,ya) 和 b=(xb,yb),定义 ρ(a,b)=(xa−xb)2+(ya−yb)2 且 d(a,b)=∣xa−xb∣+∣ya−yb∣。
输入格式
输入的第一行包含一个数 t(1≤t≤1000)——测试用例的数量。
每个测试用例的唯一一行包含一个数 k(0≤k≤105)——满足 ρ(i,j)=d(i,j) 的法杖对数要求。
输出格式
对于每个测试用例,输出的第一行应包含一个数 n(0≤n≤500)——放置的法杖数量。
接下来的 n 行中,每行应输出两个整数 xi,yi(−109≤xi,yi≤109)——第 i 根法杖的坐标。所有法杖的坐标点必须互不相同。
翻译由 DeepSeek R1 完成
输入输出样例
输入 #1复制
3 0 2 5
输出 #1复制
6 69 52 4 20 789 9308706 1337 1337 -1234 -5678 23456178 707 10 -236 -346262358 273568 6435267 2365437 31441367 246574 -45642372 -236 56 4743623 -192892 10408080 -8173135 -237415357 31441367 -78125638 278 56 143231 5 1 1 2 1 1 5 3 5 1 10
画个坐标轴,可以发现当两个坐标 x1 == x2 || y1 == y2 就一定符合,那么只要这个知道了,剩下也是暴力(官解写的那个递归有点复杂了,没必要)
参照一下数据范围,可以自己推推为什么每次是枚举到 500 就可以了,那如果在把数据范围调大的话,可以用二分优化
代码
#include <bits/stdc++.h>#define ll long long
#define PII pair<int, int>
#define Tu tuple<int, int, int>using namespace std;int T, k;void solve()
{cin >> k;if(k == 0){cout << 0 << endl;return;}vector<PII> ans;int x = 1, y = 1;while(k > 0){for(int i = y;i <= 500;i ++){int id = i - y + 1;if(k >= id - 1){k -= id - 1;ans.push_back({x, i});}else{y = i;break;}}x ++;}cout << ans.size() << endl;for(auto [x, y] : ans)cout << x << " " << y << endl;
}signed main()
{ios::sync_with_stdio(false);cin.tie(nullptr);cin >> T;while(T --){solve();}return 0;
}
加油
相关文章:
Codeforces Round 1006 Div3 A-E
A 题目描述 夏目章人(Natsume Akito)刚刚在一个新世界苏醒,便立即收到了他的第一个任务!系统为他提供了一个包含 n 个零的数组 a,以及两个整数 k 和 p。在每次操作中,章人需要选择两个整数 i 和 x&#x…...
4个 Vue 路由实现的过程
大家好,我是大澈!一个喜欢结交朋友、喜欢编程技术和科技前沿的老程序员👨🏻💻,关注我,科技未来或许我能帮到你! Vue 路由相信朋友们用的都很熟了,但是你知道 Vue 路由…...
git文件过大导致gitea仓库镜像推送失败问题解决(push failed: context deadline exceeded)
问题描述: 今天发现gitea仓库推送到某个镜像仓库的操作几个月前已经报错终止推送了,报错如下: 首先翻译报错提示可知是因为git仓库大小超过1G限制。检查本地.git文件,发现.git文件大小已达到1.13G。确定是.git文件过大导致&…...
简要分析NETLINK_ROUTE参数
NETLINK_ROUTE时Linux内核中Netlink协议族的一个子类型,专用于用户空间与内核网络子系统之间的通信,它是实现动态网络配置(如路由表、网络接口、地址管理)的核心机制,为现代网络管理工具(如iproute2&#x…...
Java中default关键字
1. 在 switch 语句中作为默认分支 在 switch 语句里,default 用于定义当所有 case 标签的值都无法匹配 switch 表达式的值时要执行的代码块。它并非强制要求,但使用它可以增强代码的健壮性,处理未预见的情况。 public class SwitchDefaultE…...
怎么利用DeepSeek进行PCB设计?
最近在琢磨利用Deepseek改善PCB的细节设计,毕竟立创EDA里面没有集成DS,因此,如何让DS能识别图片成了重中之重。所幸最近腾讯元宝里面集成了R1的满血版,这个版本可以上传图片,于是让DS识别图片就可能了。 在原理图设计…...
详细介绍 Jupyter nbconvert 工具及其用法:如何将 Notebook 转换为 Python 脚本
nbconvert 是 Jupyter 提供的一个非常强大的工具,允许用户将 Jupyter Notebook 文件(.ipynb)转换成多种格式,包括 Python 脚本(.py)、HTML、PDF、LaTeX 等。你可以通过命令行来运行 nbconvert,也…...
windows上传uniapp打包的ipa文件到app store构建版本
uniapp是一个跨平台的框架,使用windows电脑也可以开发ios软件,因为uniapp的打包是在云端实现的,本地电脑无需使用mac电脑即可完成打包。 但是打包后的ipa文件需要上架到app store的构建版本上,没有mac电脑,又如何上架…...
PySide(PyQT),QGraphicsItem的pos()和scenePos()区别
在QGraphicsItem中,pos()和scenePos()是两个重要的方法,用于描述图形项的位置,但它们的含义和用途有所不同。理解它们的区别对于正确操作和管理QGraphicsItem的位置至关重要。 1. pos()方法 • 定义:pos()返回的是QGraphicsItem在…...
idea 快捷键 Reformat code
Reformat code...
Spring Boot 项目中使用责任链模式实现复杂接口解耦和动态编排(带示例)
目录 责任链模式概述 解耦 动态编排 运用场景 代码示例 1. 定义请求和响应对象 2. 定义处理者接口和抽象处理者类 3. 实现具体的处理者类 4. 配置责任链 5. 控制器类调用责任链 代码解释 责任链模式概述 责任链模式是一种行为设计模式,它允许你将请求沿着处理者链…...
消防设施操作员考试备考:以技巧为翼,翱翔知识天空
消防设施操作员考试的备考过程中,掌握实用技巧能让学习事半功倍。以下为您介绍一系列备考技巧,助您在知识的天空中自由翱翔。 记忆技巧:化繁为简 消防知识众多,记忆难度较大。可以采用多种记忆方法,如口诀记忆法…...
qt之No executable specified
在Qt中遇到文件复制操作时出现“No executable specified”错误,通常与程序编译或运行环境配置问题相关,而非文件操作本身的问题。以下是可能的原因及解决方案: 项目配置文件损坏 现象: 在执行文件操作前,程序无法启动…...
物联网商业模式
物联网商业模式是一种战略规划,它融合了物联网技术来创造价值并获取收入。它与传统商业模式的不同之处在于,它利用互联设备来改善运营、提升客户体验以及优化服务项目。在当今由科技驱动的世界中,这种商业模式通过利用实时数据来提供创新服务…...
解决ElementPlus对话框el-dialog中关闭事件重复触发问题
问题背景 在使用ElementPlus的el-dialog组件时,发现点击取消按钮会触发两次关闭事件: 1. 第一次参数为PointerEvent(事件对象) 2. 第二次参数为undefined 需要确保点击取消按钮时仅触发一次有效关闭事件,并传递正确…...
【RabbitMQ】事务
事务的简单配置及使用 配置事务管理器声明队列生产者代码测试 RabbitMQ是基于AMQP协议实现的,该协议实现了事务机制,因此RabbitMQ也支持事务机制. SpringAMQP也提供了对事务相关的操作.RabbitMQ事务允许开发者确保消息的发送和接收是原子性的,…...
算法刷题--贪心算法
要点 其实也没啥要点,就是求局部最优解,完事了将局部最优解汇总、筛选、max\min之类的,获得全局最优解,每一次都选择最优的,这个就是贪心算法。 例题 分发饼干-中等 大概就是一堆小孩g,每个人都有一个胃口g[i]&…...
MVCC的理解(Multi-Version Concurrency Control,多版本并发控制)
1.事务特性(ACID) 原子性:事务要么全部成功,否则全部回滚 一致性:保证逻辑完整性(关联表删除) 隔离性:事务并发隔离(行锁,间隙锁) 持久性:已提交的事务永…...
CCF-CSP第24次认证第2题 --《序列查询新解》
4281. 序列查询新解 - AcWing题库 上一题“序列查询”中说道: A[A0,A1,A2,⋯,An]A[A0,A1,A2,⋯,An] 是一个由 n1n1 个 [0,N)[0,N) 范围内整数组成的序列,满足 0A0<A1<A2<⋯<An<N0A0<A1<A2<⋯<An<N。 基于序列 AA&#…...
Webpack 打包详细教程
Webpack 是一个现代 JavaScript 应用的静态模块打包工具,它可以处理 JavaScript、CSS、图片等资源,并优化它们以提高性能。以下是 Webpack 从基础到进阶的详细教程。 1. Webpack 基础概念 Webpack 的核心概念包括: Entry(入口&a…...
每日一题----------集合
数组: (1)长度开始必须指定,而且一但指定,不能修改。 (2)保存的必须为同一类型的元素。 (3)使用数组进行增加元素的代码--比较麻烦。 如果要添加数据则需要ÿ…...
滑动窗⼝(同向双指针)---最⼤连续1的个数III
题目链接 给定一个二进制数组 nums 和一个整数 k,假设最多可以翻转 k 个 0 ,则返回执行操作后 数组中连续 1 的最大个数 。 示例 1: 输入:nums [1,1,1,0,0,0,1,1,1,1,0], K 2 输出:6 解释:[1,1,1,0,0,…...
《几何原本》命题I.30
《几何原本》命题I.30 平行于同一直线的两条直线互相平行。 设 l 1 ∥ l 2 , l 1 ∥ l 3 l_1\parallel l_2,l_1\parallel l_3 l1∥l2,l1∥l3 则 ∠ 1 ∠ 2 , ∠ 1 ∠ 3 \angle 1\angle 2,\angle 1\angle 3 ∠1∠2,∠1∠3 则 ∠ 2 ∠ 3 \angle 2\angle 3 ∠2∠3…...
蓝桥杯 k倍区间
题目描述 给定一个长度为 NN 的数列,A1,A2,⋯ANA1,A2,⋯AN,如果其中一段连续的子序列 Ai,Ai1,⋯AjAi,Ai1,⋯Aj ( i≤ji≤j ) 之和是 KK 的倍数,我们就称这个区间 [i,j][i,j] 是 K 倍区间。 你能求出数列中总共有多少个 KK 倍区间…...
dify-SQL查询
第1节 DIFY 编排流程 1.1 步骤 1.开始:用户输入分析需求 2.LLM-SQL 专家:大模型根据用户输入需求生成 SQL 查询 3.SQL查询:执行查询并获取数据 4.结束:输出查询结果集 1.2 工作流 第2节 组件配置 2.1 开始 新建一个开始组件&am…...
【制作PPT的AI工具】
制作PPT的AI工具: 1. Gamma: 特点: 无需下载,支持网页、移动端及iPad使用。提供多种模板和主题,支持一键生成PPT大纲、排版和配图。优点: 操作简单,适合快速制作演示文稿。 2. Beautiful.ai&…...
贪心算法精解:用C++征服最优解问题
贪心算法精解:用C征服最优解问题 一、贪心算法的本质:当下最优即全局最优 贪心算法如同下棋高手,每一步都选择当前最优的走法。它的核心思想是:通过局部最优选择的叠加,最终得到全局最优解。这种算法在时间复杂度上往…...
《程序员的自我修养—链接、装载与库》-- 对书中常见段的讲解总结
1. 核心段的作用与特点 (1) .text 段(代码段) 内容:存放程序的可执行指令(机器码),例如函数的实现代码。特点: 通常是只读的(防止程序意外修改指令)。在程序运行前已确…...
一文了解汽车图像传感器
2024年底,安森美做了题为"How Automotive Image Sensors Transform the Future of Autonomous Driving"的演讲,这里结合其内容对自动驾驶图像传感器做一个介绍。 当前的自动驾驶感知技术主要有两大技术路线:一种是仅使用摄像头作为传感器进行信息采集的纯…...
2025数据存储技术风向标:解析数据湖与数据仓库的实战效能差距
一、技术演进的十字路口 当前全球数据量正以每年65%的复合增长率激增,IDC预测到2027年企业将面临日均处理500TB数据的挑战。在这样的背景下,传统数据仓库与新兴数据湖的博弈进入白热化阶段。Gartner最新报告显示,采用混合架构的企业数据运营效…...
