[题解] 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 ...
随机推荐
- xamarin.forms+prism 实现DialogService(对话框服务)
Getting Started with IDialogAware Creating dialogs with the DialogService requires a ViewModel that ...
- 成语答题小程序v3.0
自从开源成语答题小程序以来不断完善功能,并且不断修复bug,成语答题小程序v3版本完善了很多功能 1.增加了原生模板广告,设置原生模板广告后可以设置首页或答题页是否显示原生模板广告 2.增加了背景设置 ...
- 信息资源管理文字题之“IT服务管理的核心流程和具体内容”
一.为了充分利用ERP信息系统资源,LX集团采用了各种先进的信息系统管理概念和方法,包括IT服务管理. 要求:说明IT服务管理流程包括那两大核心类别,分别说明他们个包含哪些具体流程 二.答案 答:两大 ...
- AI工具 Cursor + MCP服务:提效与落地的完美组合
在当今软件开发快速演进的时代,开发者们越来越依赖于人工智能辅助工具来提升效率与质量.最近我在实际项目中深度使用了 Cursor 编辑器 和 MCP(Model Context Protocol)服务, ...
- odoo14里面附件传输接口
@http.route('/fmcg/download/pdf', type='http', auth="public", csrf=False, cors='*') def up ...
- 在MySQL数据库中保存布尔型数据
在存储数据时,经常会用到"是"."否"或者"有"."无"这种数据,这种时候就要应用布尔型这种数据类型了.那如何在M ...
- 代码随想录第11天 | 二叉树part01
理论基础 需要了解 二叉树的种类,存储方式,遍历方式 以及二叉树的定义 文章讲解:https://programmercarl.com/%E4%BA%8C%E5%8F%89%E6%A0%91%E7 ...
- 在java中动态执行js代码
说明 在jdk11就标注了要取消NashornScriptEngineFactory类,在jdk17正式移除,所以在17上得加入pom依赖 <dependency> <groupId ...
- MVVM-命令模式的实现与应用
MVVM-命令模式的实现与应用 本文同时为b站WPF课程的笔记,相关示例代码 绑定 这个其实前面已经讲过一部分 使用{Binding}设置数据绑定,将控件的属性绑定到 ViewModel 的相应属性. ...
- Burp Suite 企业级深度实战教程
第一部分:环境搭建与高级配置 1.1 专业版激活与插件生态 # 专业版激活(Linux) java -jar -Xmx2048m burpsuite_pro.jar --activate --acti ...