(CF2166) Codeforces Round 1064 (Div. 2)

news/2025/11/18 19:23:14/文章来源:https://www.cnblogs.com/Tomori0505/p/19234149

A. Same Difference

显然最后只会变成原串的最后一个字符,考虑其在串中出现次数即可。

#include <bits/stdc++.h>
using namespace std;
string s;
int cnt[26], len;void prepare() {cin >> len >> s;memset(cnt, 0, sizeof(cnt));for (int i = 0; i < len; i++) {cnt[s[i] - 'a']++;}
}void calculate() {cout << len - cnt[s[len - 1] - 'a'] << '\n';
}void solve() {int t;cin >> t;while (t--) {prepare(), calculate();}
}int main() {solve();return 0;
}

B. Tab Closing

答案只有可能是 \(1\)\(2\)

考虑分情况取值,如果中途长度取值改变说明是 \(2\) 次操作。如果说 \(a \leq b\) 一定是一直取 \(\frac{a}{m}\);同时考虑临界点 \(b = \frac{a}{m}\)\(m\) 的取值如果小于 \(n\) 则也会出现多的一次操作。

#include <bits/stdc++.h>
using namespace std;
int n, a, b, m1, m2, st;void prepare() {scanf ("%d %d %d", &a, &b, &n);
}void calculate() {if (a <= b || a / b >= n) {printf ("1\n");}else {printf ("2\n");}
}void solve() {int t;scanf ("%d", &t);while (t--) {prepare(), calculate();}
}int main() {solve();return 0;
}

C. Cyclic Merging

因为要动态维护,并且每次取最小,考虑直接用 set 维护一个 \((\max(a_i, a_{rhs_i}), i)\) 的二元组,每次取最小更新答案的同时更新左右两边 \(lhs_i,rhs_i\) 的取值(因为是环初始 \(lhs_1 = n, rhs_n = 1\))。

具体可以看代码。

#include <bits/stdc++.h>
#define mkp make_pair
using namespace std;
using pii = pair<int, int>;
int n, a[200005], lhs[200005], rhs[200005];
long long ans;
set<pii> s;void prepare() {scanf ("%d", &n);for (int i = 1; i <= n; i++) {scanf ("%d", &a[i]);if (i >= 2 && i <= n - 1) {lhs[i] = i - 1, rhs[i] = i + 1;}}lhs[1] = n, rhs[1] = 2;lhs[n] = n - 1, rhs[n] = 1;s.clear();for (int i = 1; i <= n; i++) {s.emplace(max(a[i], a[rhs[i]]), i);}
}void calculate() {ans = 0;while ((int)s.size() > 1) {int i = (*s.begin()).second;int l = lhs[i], r = rhs[i];s.erase(mkp(max(a[l], a[i]), l)), s.erase(mkp(max(a[i], a[r]), i));ans += max(a[i], a[r]), a[r] = max(a[i], a[r]);lhs[r] = l, rhs[l] = r;s.emplace(max(a[l], a[r]), l);}printf ("%lld\n", ans);
}void solve() {int t;scanf ("%d", &t);while (t--) {prepare(), calculate();}
}int main() {solve();return 0;
}

D. Marble Council

我们考虑当前放在 \(S\) 中的数的限制。

直接在值域上考虑。记 \(ton_x\) 表示 \(x\) 的出现次数,因为存在于 \(s\) 中的数一定是对应的划分出的非空集的众数,那么就有限制 \(\sum\limits_{x \in S}{ton_x} \geq \max\limits_{x \notin S}\{ton_x\}\),否则不合法。

不难发现本质上是在选满足限制的子序列,考虑记 \(f_{i, j}\) 表示前 \(i\) 个数中选出来的子序列每个数的出现次数和为 \(j\) 的贡献。每个出现的 \(x\) 都可以被放进 \(S\) 里,故一种 \(S\) 的贡献是 \(\prod\limits_{x \in S}{ton_x}\)。那么有转移:\(f_{i, j} = f_{i - 1, j} + f_{i - 1, j - ton_i} \times ton_i\)

最后答案为 \(\sum\limits_{i = \max\{ton_x\}} ^ {n} {f_{n, i}}\)

#include <bits/stdc++.h>
using namespace std;
const int mod = 998244353;
int n, a[5005], ton[5005];
long long dp[5005], ans;void init() {memset(dp, 0, sizeof(dp));memset(ton, 0, sizeof(ton));
}void prepare() {scanf ("%d", &n);for (int i = 1; i <= n; i++) {scanf ("%d", &a[i]), ton[a[i]]++;}sort(ton + 1, ton + n + 1);
}void calculate() {dp[0] = 1;for (int i = 1; i <= n; i++) {if (!ton[i]) {continue;}for (int j = n; j >= ton[i]; j--) {dp[j] = (dp[j] + dp[j - ton[i]] * ton[i] % mod) % mod;}}ans = 0;for (int i = ton[n]; i <= n; i++) {ans = (ans + dp[i]) % mod;}printf ("%lld\n", ans);
}void solve() {int t;scanf ("%d", &t);while (t--) {init(), prepare(), calculate();}
}int main() {solve();return 0;
}

E. Binary Wine

小清新小贪心。

哈基米哈基米

从高到低位考虑 \(c\),显然高位需要更大的 \(a_i\) 去补。如果当前 \(c\) 这一位没有可用的 \(a_i\),显然需要修改来补,那么修改最大的 \(a_i\) 肯定是最优的。那么可以发现最多只需要最大的 \(\log V\)\(a_i\) 即可。记当前这一位是第 \(d\) 位。

  • \(a_i \geq 2^d\),直接补上了这一位。

  • \(a_i < 2^d\),修改到补上这一位为止,对答案产生 \(2^d - a_i\) 的贡献。

每次询问直接暴力遍历 + 修改即可。注意每次还原被操作的数组。

#include <bits/stdc++.h>
#define INF32 0x3f3f3f3f
#define INF64 0x3f3f3f3f3f3f3f3f
#define getchar() (p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 10000000, stdin), p1 == p2) ? EOF : *p1++)
using namespace std;
char *p1, *p2, buf[10000001];int read() {int res = 0, f = 1;char ch = getchar();while (ch < '0' || ch > '9') {f = ch == '-' ? -1 : 1;ch = getchar();}while (ch >= '0' && ch <= '9') {res = res * 10 + (ch ^ 48);ch = getchar();}return res * f;
}int n, q, idx, a[500005], b[500005];
long long ans;void prepare() {n = read(), q = read();for (int i = 1; i <= n; i++) {a[i] = read();}sort(a + 1, a + n + 1, greater<int>());
}void calculate() {while (q--) {int c;c = read(), idx = ans = 0;for (int i = 1; i <= min(30, n); i++) {b[++idx] = a[i];}for (int i = 30; ~i; i--) {if ((c >> i) & 1) {int id = 0;long long cost = INF64, used = 0;for (int j = 1; j <= idx; j++) {if (b[j] >= (1 << i)) {used = 0;}else {used = ((1 << i) - b[j]);}if (used <= cost) {cost = used, id = j;}}b[id] += cost, ans += cost, b[id] -= (1 << i);}}printf ("%lld\n", ans);}
}void solve() {int t;t = read();while (t--) {prepare(), calculate();}
}int main() {solve();return 0;
}

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

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

相关文章

详细介绍:【C++庖丁解牛】哈希表/散列表的设计原理 | 哈希函数

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

Balatro GBA - 在Game Boy Advance上体验扑克 Roguelike

Balatro GBA是一个非官方的粉丝项目,旨在Game Boy Advance平台上重现Balatro游戏的核心玩法。该项目包含完整的扑克手牌分析、小丑卡牌系统、盲注机制等核心功能,采用GBA硬件优化技术实现流畅的游戏体验。Balatro GB…

在线离线

在线&离线在线和离线可以简单的理解为对于所有的操作是否需要读入完毕。在线: 询问还没有结束就输出回答,即边问边运行,问一句答一句 如树套树,且带有“可持久化”的算法(主席树(可持久化线段树)) 离线: 在…

深入解析:专题:2025年医疗健康行业状况报告:投融资、脑机接口、AI担忧|附130+份报告PDF合集、图表下载

深入解析:专题:2025年医疗健康行业状况报告:投融资、脑机接口、AI担忧|附130+份报告PDF合集、图表下载pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: …

【LVGL】线条部件

引言 线条部件(lv_line)线条部件相关 api 函数示例程序 static lv_point_t line_points[] = { {150, 50}, {250, 200}, {50, 200}, {150, 50} };void my_gui(void) {lv_obj_t *line = lv_line_create(lv_scr_act());…

Kali Linux中FScan安装与使用

Kali Linux fscan安装与使用 fscan是一款用go语言编写的开源工具,一款内网综合扫描工具,方便一键自动化、全方位漏扫扫描。 准备工作 安装fscan需要Go语言环境: apt-get install golang-go查看是否安装成功: go ver…

2025年11月新疆电力电缆,高压电缆,特种电缆厂家权威推荐,低损耗稳定性强的行业优选线缆!

2025年11月新疆电力电缆、高压电缆、特种电缆厂家权威推荐在新疆,若要寻找低损耗、稳定性强的线缆,新疆金顺亿线缆有限公司是值得关注的行业优选。该公司扎根乌鲁木齐13年,在线缆领域积累了丰富的经验,为疆内外客户…

linux break

在 Linux 系统中,break 是一个用于 bash 脚本中的关键字,用于终止循环(如 while、for、until 等)。 1. break 的基本用法 while true; doecho + #引号 + This is a loop iteration. + #引号 + if [ + #引号…

2025年11月新疆充电桩电缆,铝合金电缆,橡胶电缆厂家最新推荐,聚焦线缆高端定制与全案交付!

2025年11月新疆充电桩电缆,铝合金电缆,橡胶电缆厂家最新推荐,聚焦线缆高端定制与全案交付!在新疆,有这样一家扎根线缆行业多年的企业——新疆金顺亿线缆有限公司,它凭借自身的诸多优势,成为众多客户在选择充电桩…

2025年11月试验机源头厂家优选榜:深度拆解品牌实力与服务优势!

试验机作为工业生产质量控制与科研创新的核心设备,在新材料研发、高端制造、建筑工程等领域发挥着 “性能标尺” 的关键作用。随着行业向智能化、定制化升级,具备核心技术实力与全场景服务能力的企业逐渐成为市场主流…

2025年11月新疆光伏电缆,海底电缆,架空绝缘导线厂家推荐,实力品牌深度解析工程采购无忧!

2025年11月新疆光伏电缆,海底电缆,架空绝缘导线厂家推荐,实力品牌深度解析工程采购无忧!在2025年11月的新疆,对于光伏电缆、海底电缆、架空绝缘导线等线缆产品有需求的工程采购方来说,选择一家可靠的厂家至关重要…

2025年11月新疆控制电缆,低压电缆,通信电缆厂家推荐,导电性能与抗压性精准检测深度解析!

《2025年11月新疆控制电缆,低压电缆,通信电缆厂家推荐,导电性能与抗压性精准检测深度解析!》在2025年的新疆,对于控制电缆、低压电缆以及通信电缆等线缆产品的需求持续增长。当众多企业和个人在寻找优质线缆厂家时…

ReSharper 2025 破解

本文仅供学习使用,请在24小时内删除相关文件和密钥。首先是License Key的生成【来自Ankio】: let loadFiles = ["Form" ]; $.loader(loadFiles, () => {window.jQuery = $;$.form.submit("form&qu…

银河麒麟v10批量部署Python Flask任务小白教程

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

CF183C Cyclic Coloring

比较牛的题。 首先经典结论是,\(k\) 得整除所有环长,这是必要条件。 第二是需要找到所有起点和终点相同的链,这些链长必须 \(\mod k\) 都相同,更加直接的说法是,对于两条链 \(x, y\),则必须满足 \(k|x - y\)。 你…

CF1572D

将每个人视为一个节点,可以一组的人连边 对于连边的两个人,他们的二进制中1的个数差为1,奇偶不同 所以这个图构成一个二分图,转化为二分图最大权匹配 而注意到,每选择一条边,有最多 \(2n-2\)条边不能选了,因此我…

信息论(七):对数似然比与相对熵(KL散度)

“对数似然比”听起来很复杂,但当你一层层剥开它的面纱,就会发现它其实是由非常简单、非常自然的概念构成的。 “似然比”(likelihood)是比较同一事件的两种说法。假设你对同一个变量 X 有两个不同的概率分布: P(…

纯CSS实现多种背景图案:渐变条纹、蓝图网格、波点与棋盘效果全解析(附 Sass Mixin 封装) - 指南

纯CSS实现多种背景图案:渐变条纹、蓝图网格、波点与棋盘效果全解析(附 Sass Mixin 封装) - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block …

2025年11月中走丝线切割机厂家推荐:深耕高精度/数控/极速中走丝线切割机速精密制造,实力厂家全揭秘!

在制造业精密加工需求持续增长的背景下,丝线切割机作为核心加工装备,成为中小制造企业提升生产效率的关键。江苏莱特斯数控机床有限公司(简称 “莱特斯数控”)深耕该领域,与众多专注细分市场的企业一同,以务实的…

2025年云南/贵州/甘肃/西藏净化板源头厂家优选指南:中空玻镁/岩棉/硫氧镁净化板与洁净板实力厂家盘点!

成都盛宏净化彩钢板有限公司是西南地区专注净化板研发、生产与销售的实力企业,凭借多年行业深耕,已形成成熟的产品体系与服务模式。公司配备标准化生产厂房与先进加工设备,主打岩棉、玻镁、硅岩等多类型净化板,产品…