[题解] codeforces 76 C Mutation
第一次写紫题题解,还是特别纪念一下。
大佬轻喷哈。
题目大意:
题目写的很直白明了,这里不写了。
思路:
我们即询问有多少种删除的字符集是合法的,只需要对于每种删除的字符集计算出相邻字符产生的代价即可。
考虑对于两个位置 \((i,j)\),其能产生代价当旦仅当中间的字符被删光且 \(i,j\) 都没被删,考虑中间的字符集为 \(T\),那么产生贡献的即为所有 \(T\) 的不包含 \(s_i,s_j\) 的超集 \(S\)。
首先显然要有 \(T\) 不包含 \(s_i,s_j\)。于是乎我们发现,如果我们钦定了 \(i\),再枚举一个字符 \(C\),那么 \(i\) 右侧第一个字符 \(c\) 才有可能产生贡献,那么有贡献的 \((i,j)\) 就只有 \(O(nk)\) 对。
考虑对于一组 \((S,a,b)\) 产生的贡献,其中 \(a,b\) 表示 \(s_i,s_j\),即为不可删的字符。我们只需要对 \(f_s,f_{s\cup a,b}\) 进行一个 \(+m_{a,b}\) 的贡献,\(f_{s\cup \{a\}},f_{s\cup \{b\}}\),进行一个 \(-m_{a,b}\) 的贡献即可。
然后我们对 \(f\) 进行高维前缀和即可得到代价数组 \(g\)。
这样的话时间复杂度为 \(O(n\cdot k+2^k\cdot k)\)。
代码:
#include<bits/stdc++.h>
using namespace std;
const int N = 2e5 + 10, K = 25;
int n, k, T, sum, b[K], t[K], a[K][K], f[1 << K], ans;
string s;
void init() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n >> k >> T >> s;
for (int i = 0; i < n; i++) {
s[i] -= 'A';
}
for (int i = 0; i < n; i++) {
sum |= 1 << s[i];
}
for (int i = 0; i < k; i++) {
cin >> t[i];
}
for (int i = 0; i < k; i++) {
for (int j = 0; j < k; j++) {
cin >> a[i][j];
}
}
return ;
}
int main() {
init();
memset(b, -1, sizeof b);
for (int i = 0; i < k; i++) {
f[1 << i] = t[i];
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < k; j++) {
if (b[j] >= 0) {
if (!((b[j] >> j) & 1) && !((b[j] >> s[i]) & 1)) {
f[b[j]] += a[j][s[i]];
f[b[j] | (1 << j)] -= a[j][s[i]];
f[b[j] | (1 << s[i])] -= a[j][s[i]];
f[b[j] | (1 << j) | (1 << s[i])] += a[j][s[i]];
}
b[j] |= (1 << s[i]);
}
}
b[s[i]] = 0;
}
for (int i = 0; i < k; i++) {
for (int j = 0; j < 1 << k; j++) {
if ((j >> i) & 1) {
f[j] += f[j ^ (1 << i)];
}
}
}
for (int i = 0; i < 1 << k; i++) {
if ((i & sum) == i && f[i] <= T && i != sum) {
ans++;
}
}
cout << ans;
return 0;
}
[题解] codeforces 76 C Mutation的更多相关文章
- [题解]Codeforces Round #709 (Div. 1, based on Technocup 2021 Final Round) - A. Basic Diplomacy
[题目] A. Basic Diplomacy [描述] Aleksey有n个朋友,有一个m天的假期,每天都需要一个朋友来陪他.给出每天有空的朋友的编号,要求同一个朋友来的天数不能超过m/2上取整.求 ...
- [题解]Codeforces Round #254 (Div. 2) A - DZY Loves Chessboard
链接:http://codeforces.com/contest/445/problem/A 描述:一个n*m的棋盘,有一些格子不能放棋子.现在把黑白棋子往上放,要求放满且相邻格子的棋子颜色不同.输出 ...
- [题解] Codeforces Round #549 (Div. 2) B. Nirvana
Codeforces Round #549 (Div. 2) B. Nirvana [题目描述] B. Nirvana time limit per test1 second memory limit ...
- 题解——CodeForces 438D The Child and Sequence
题面 D. The Child and Sequence time limit per test 4 seconds memory limit per test 256 megabytes input ...
- [题解][Codeforces]Good Bye 2019 简要题解
构造题好评,虽然这把崩了 原题解 A 题意 二人游戏,一个人有 \(k_1\) 张牌,另一个人 \(k_2\) 张,满足 \(2\le k_1+k_2=n\le 100\),每张牌上有一个数,保证所有 ...
- [题解][Codeforces]Codeforces Round #602 (Div. 1) 简要题解
orz djq_cpp lgm A 题意 给定一个分别含有 \(\frac n2\) 个左括号和右括号的括号序列 每次可以将序列的一个区间翻转 求一个不超过 \(n\) 次的操作方案,使得操作完之后的 ...
- [题解]Codeforces Round #254 (Div. 2) B - DZY Loves Chemistry
链接:http://codeforces.com/contest/445/problem/B 描述:n种药品,m个反应关系,按照一定顺序放进试管中.如果当前放入的药品与试管中的药品要反应,危险系数变为 ...
- [题解] Codeforces Global Round 22 1738 A B C D E F 题解
很久没rated打过cf的比赛了,这次打得还行,至少进前100了 点我看题 A. Glory Addicts 把类型0的数放进数组a里,类型1的数放进数组b里.如果\(|a|=|b|\),你可以把所有 ...
- 题解——Codeforces Round #508 (Div. 2) T3 (贪心)
贪心的选取最优解 然后相减好 记得要开long long #include <cstdio> #include <algorithm> #include <cstring ...
- 题解——Codeforces Round #508 (Div. 2) T2 (构造)
按照题意构造集合即可 注意无解情况的判断 #include <cstdio> #include <algorithm> #include <cstring> #in ...
随机推荐
- 异步IO与Tortoise-ORM的数据库
title: 异步IO与Tortoise-ORM的数据库 date: 2025/04/29 13:21:47 updated: 2025/04/29 13:21:47 author: cmdragon ...
- 【笔记】reko 0.10.2 反编译工具安装和使用记录|(2) user‘s guide
Reko user's guide Reko是一个二进制可执行文件的反编译器.它接受输入的一个或多个二进制可执行文件,然后反编译成高级语言.它可以在GUI shell中被交互地使用,作为一个命令行项目 ...
- 深度评测:DeepSeek API 在代码分析与审查中的实战应用 (附 Prompt 示例)
人工智能(AI)正在深刻改变软件开发的各个环节,从最初的需求分析 1 到最终的部署维护 1,AI 的身影无处不在.尤其在代码编写.分析和审查方面,AI 辅助工具如 GitHub Copilot 8 已 ...
- 【BERT】详解BERT
一.为什么要提出BERT? 传统的RNN类模型,包括LSTM,GRU以及其他各种变体,最大的问题在于提取能力不足.在<Why Self-Attention? A Targeted Evaluat ...
- Rolldown:下一代JavaScript/TypeScript打包工具,基于Rust的JS打包工具-速度贼快
Vue 团队已正式开源 Rolldown 项目,这是一款基于 Rust 的 JavaScript 打包工具. 项目介绍 Rolldown 是使用 Rust 开发的 Rollup.js 编译工具的替代品 ...
- Python基础 - 常用内置对象
数字.字符串.字节串.列表.元组.字典.集合.布尔型.空类型.异常.文件.可迭代对象.编程单元def.class.module 常量与变量 x = 3 type(x) # 查看变量类型 int typ ...
- #React中类组件中关于回调函数的一个问题
在ES6中,类中定义的方法,是放在原型对象的,供实例对象引用. //创建一个Person类 class Person { constructor(name,age) { this.name = nam ...
- 赣CTF-Misc方向wp
checkin 下载附件,一张图片,拖进010,在文件尾看到隐藏文本,提取并用社会主义价值解密 ez_forensics 提示为结合题目进行想象,我们会想到取证第一步vc挂载,但是需要密码,研究图片, ...
- Springboot笔记<7>过滤器与拦截器
过滤器 拦截器 过滤器 过滤器拦截的是URL Spring中自定义过滤器(Filter)一般只有一个方法,返回值是void,当请求到达web容器时,会探测当前请求地址是否配置有过滤器,有则调用该过滤器 ...
- HarmonyOS运动开发:打造便捷的静态快捷菜单
鸿蒙核心技术##运动开发# 前言 在运动类应用中,用户往往需要快速访问常用功能,如查看成绩.赛事信息或开始运动.为了提升用户体验,鸿蒙(HarmonyOS)提供了静态快捷菜单功能,允许用户从桌面直接跳 ...