[ABC246F] typewriter
Problem Statement
We have a typewriter with $N$ rows. The keys in the $i$-th row from the top can type the characters in a string $S_i$.
Let us use this keyboard to enter a string, as follows.
- First, choose an integer $1 \le k \le N$.
- Then, start with an empty string and only use the keys in the $k$-th row from the top to enter a string of length exactly $L$.
How many strings of length $L$ can be entered in this way?
Since the answer can be enormous, print it modulo $998244353$.
Constraints
- $N$ and $L$ are integers.
- $1 \le N \le 18$
- $1 \le L \le 10^9$
- $S_i$ is a (not necessarily contiguous) non-empty subsequence of
abcdefghijklmnopqrstuvwxyz.
Input
Input is given from Standard Input in the following format:
$N$ $L$
$S_1$
$S_2$
$\dots$
$S_N$
Output
Print the answer.
Sample Input 1
2 2
ab
ac
Sample Output 1
7
We can enter seven strings: aa, ab, ac, ba, bb, ca, cc.
Sample Input 2
4 3
abcdefg
hijklmnop
qrstuv
wxyz
Sample Output 2
1352
Sample Input 3
5 1000000000
abc
acde
cefg
abcfh
dghi
Sample Output 3
346462871
Be sure to print the answer modulo $998244353$.
如果只有一个串,这一个串总共有 \(x\) 个字符,那么构成的长度为 \(l\) 的串总共有 \(x^l\) 个。
然后我们很快发现会有重复的,那么就需要容斥原理。假设有 \(k\) 个串,设在每个串中都出现了的字符数量为 \(s\),那么他们共同重复的串为 \(s^l\)
然后容斥就可以了。
#include<bits/stdc++.h>
const int N=35,P=998244353;
char s[N];
int t[N],n,len,l;
long long ans;
int pow(int x,int y)
{
if(!y)
return 1;
int t=pow(x,y>>1);
if(y&1)
return 1LL*t*t%P*x%P;
return 1LL*t*t%P;
}
int mo(int x)
{
return (x%P+P)%P;
}
int bitcnt(int x)
{
int cnt=0;
while(x)
{
x-=x&-x;
++cnt;
}
return cnt;
}
void dfs(int x,int y,int z)
{
if(x>n)
{
if(y)
{
int f=y&1? 1:-1;
ans=mo(ans+f*pow(bitcnt(z),l)%P);
}
}
else
{
dfs(x+1,y+1,z&t[x]);
dfs(x+1,y,z);
}
}
int main()
{
scanf("%d%d",&n,&l);
for(int i=1;i<=n;i++)
{
scanf("%s",s+1);
len=strlen(s+1);
for(int j=1;j<=len;j++)
t[i]|=1<<s[j]-'a';
// printf("%d\n",t[i]);
}
dfs(1,0,(1<<26)-1);
printf("%lld",ans);
}
[ABC246F] typewriter的更多相关文章
- HDU5470 Typewriter (SAM+单调队列优化DP)
Typewriter Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Tota ...
- HDU Typewriter 6583 dp SAM 卡常
LINK:Typewriter 好久没写SAM了 什么都给忘了. 写了大概2h.感觉被卡常还看了题解. 考虑dp 然后容易想到维护前面的一个j决策 尽可能小. 然后每次考虑向后加一个字符 不过不行就跳 ...
- Vue个人博客关于标题自动打字机效果Typewriter
最近在写个人Blog 中间看过很多个人博客的开发 一大部分用的是Hexo框架或者vuePress框架 导入各种主题样式插件等等 但是看多了就会发现 很多博主的个人博客基本都很相似 并没有什么新东西呈现 ...
- HDU5470 Typewriter SAM 动态规划 单调队列
原文链接https://www.cnblogs.com/zhouzhendong/p/HDU5470.html 题目传送门 - HDU5470 题意 你需要写一个只包含小写字母的字符串 $s$ . 你 ...
- HDU6583:Typewriter(dp+后缀自动机)
传送门 题意: 给出\(p,q\),现在要你生成一个字符串\(s\). 你可以进行两种操作:一种是花费\(p\)的代价随意在后面添加一个字符,另一种是花费\(q\)的代价可以随意赋值前面的一个子串. ...
- HDU 6583 Typewriter(后缀自动机)
Typewrite \[ Time Limit: 1500 ms\quad Memory Limit: 262144 kB \] 题意 给出一个字符串 \(s\),现在你需要构造出这个字符串,你每次可 ...
- HDU - 6583 Typewriter (后缀自动机+dp)
题目链接 题意:你要打印一段字符串,往尾部添加一个字符需要花费p元,复制一段字符到尾部需要花费q元,求打印完全部字符的最小花费. 一开始想的贪心,后来发现忘了考虑p<q的情况了,还纳闷怎么不对. ...
- [2019杭电多校第一场][hdu6583]Typewriter(后缀自动机&&dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6583 大致题意是说可以花费p在字符串后添加一个任意字符,或者花费q在字符串后添加一个当前字符串的子串. ...
- HDU 6583 Typewriter 题解
——本题来自杭电多校第一场 题意:给定一个字符串,主角需要用打字机将字符串打出来,每次可以: 1.花费p来打出任意一个字符 2.花费q来将已经打出的某一段(子串)复制到后面去 对于这种最优化的问题,我 ...
- 【HDOJ6583】Typewriter(SAM,DP)
题意:给定一个由小写字母组成的字符串,每次可以花费p在串后加上任意一个字母,花费q在串后复制一个当前串的子串,问生成字符串的最小花费 n<=2e5,1<=p,q<2^31 思路: S ...
随机推荐
- QA|workon env后没有进入虚拟环境,但也没有报错,但cmd可以|Python虚拟环境
问题:pycharm的terminal执行workon env后没有进入虚拟环境,但也没有报错 但cmd可以 原因:因为pycharm的terminal用的是powershell,更改为cmd,重新打 ...
- HDU 1171 0-1背包
最近感觉DP已经完全忘了..各种爆炸,打算好好复习一发,0-1背包开始 Big Event in HDU Problem Description Nowadays, we all know that ...
- GDB苹果网页一键打包工具(IOS,IPA,苹果应用网页打包,WINDOWS平台)
工具简介 GDB苹果网页一键打包工具(IOS,IPA,苹果应用网页打包,Windows平台)可以把本地HTML项目或者网站打包为一个苹果应用IPA文件,无需编写任何代码,支持在苹果设备上安装运行.作为 ...
- numpy 索引,切片 ,转置,变值,多个数组的拼接
- umich cv-2-1
UMICH CV Linear Classifiers 对于使用线性分类器来进行图片分类,我们可以给出这样的参数化方法: 而对于这样一个式子,我们怎么去理解呢? 首先从代数的角度,这个f(x,W)就是 ...
- MySQL中sql_mode的设置
在升级MySQL版本到8.0的过程中,需要关注sql_mode参数默认值的变化,8.0版本sql_mode不支持 NO_AUTO_CREATE_USER,要避免配置的sql_mode中带有 NO_AU ...
- 深入了解 GPU 互联技术——NVLINK
随着人工智能和图形处理需求的不断增长,多 GPU 并行计算已成为一种趋势.对于多 GPU 系统而言,一个关键的挑战是如何实现 GPU 之间的高速数据传输和协同工作.然而,传统的 PCIe 总线由于带宽 ...
- oracle命令3 冷备份
用户管理的备份:备份脚本要自己写:备份哪些文件要自己选:恢复时要复制那些文件自己判断:恢复需要的日志,自己找: 备份,需要备份保存关键SCN信息的文件:一次完成的备份包括:控制文件,数据文件,日志文件 ...
- 手撕Vue-查找指令和模板
接着上一篇文章,我们已经实现了提取元素到内存的过程,接下来我们要实现的是查找指令和模板. 大致的思路是这样的: 遍历所有的节点 需要判断当前遍历到的节点是一个元素还是一个文本 如果是一个元素, 我们需 ...
- 联想think服务器centos系统安装
一.前言 本以为安装服务器是一件轻松顺利的事,没想到一安就是两天- 二.错误列表 1.硬件系统不兼容低版本centos 刚开始安装centos6.8的操作系统总是无法找到配置好的raid阵列导致无法安 ...