CF 434C Tachibana Kanade's Tofu[数位dp+AC自动机]
- Solution
//本代码压掉后两维
#include<cstdio>
#define max(a,b) (a<b?b:a)
using namespace std;
inline void read(int &x){
register char ch=getchar();x=;
while(ch<''||ch>'') ch=getchar();
while(ch>=''&&ch<='') x=x*+ch-'',ch=getchar();
}
const int N=,M=;
const int mod=1e9+;
int n,m,K,cnt=,a[N],b[N];int bfs[N];
int v[N],fail[N],next[N][],trans[N][];
int f[N][N][M];
inline void insert(int l){
int x,now=;
for(int i=;i<=l;i++){
read(x);
if(!next[now][x]) next[now][x]=++cnt;
now=next[now][x];
}
read(x);v[now]+=x;
}
inline void build_AC(){
int l=,r=,x,y;
for(int i=;i<m;i++){
if(next[][i]){
x=next[][i];
fail[x]=;
trans[][i]=x;
bfs[++r]=x;
}
else{
trans[][i]=;
}
}
while(l!=r){
x=bfs[++l];
v[x]+=v[fail[x]];
for(int i=,p;i<m;i++){
if(next[x][i]){
y=next[x][i];
for(p=fail[x];p&&!next[p][i];p=fail[p]);
if(p) fail[y]=next[p][i];
else fail[y]=;
trans[x][i]=y;
bfs[++r]=y;
}
else{
for(p=fail[x];p&&!next[p][i];p=fail[p]);
if(p) trans[x][i]=next[p][i];
else trans[x][i]=;
}
}
}
}
inline void Plus(int &x,int y){
x+=y;
if(x>=mod) x-=mod;
}
inline void prep(int bit){//无任何限制预处理
for(int i=;i<=cnt;i++) f[][i][]=;
for(int i=;i<=bit;i++){
for(int j=;j<=cnt;j++){
for(int p=,x;p<m;p++){
x=trans[j][p];
for(int k=v[x];k<=K;k++){
Plus(f[i][j][k],f[i-][x][k-v[x]]);
}
}
}
}
}
inline int work(int *a,bool flag){
int x,y,w,ans=;
//取出最高位后,保证无前导零后,无限制
for(int i=;i<a[];i++){
for(int j=;j<m;j++){
y=trans[][j];
w=v[y];
for(int k=w;k<=K;k++){
Plus(ans,f[i-][y][k-w]);
}
}
}
//走一遍上界,要保证无前导零
x=;w=;
for(int i=;i<=a[];i++){
for(int j=(i==);j<a[i];j++){
y=trans[x][j];
for(int k=;k<=K-(w+v[y]);k++){
Plus(ans,f[a[]-i][y][k]);
}
}
x=trans[x][a[i]];
w+=v[x];
}
if(flag){//上界有否取
if(w<=K) Plus(ans,);
}
return ans;
}
int main(){
read(n);read(m);read(K);
read(a[]);for(int i=;i<=a[];i++) read(a[i]);
read(b[]);for(int i=;i<=b[];i++) read(b[i]);
for(int i=,l;i<=n;i++) read(l),insert(l);
build_AC();prep(max(a[],b[]));
printf("%d\n",(work(b,)-work(a,)+mod)%mod);
return ;
}
CF 434C Tachibana Kanade's Tofu[数位dp+AC自动机]的更多相关文章
- 咕咕(数位dp+AC自动机)
咕咕(数位dp+AC自动机) 若一个字符串的字符集合是0~m-1,那么称它为m进制字符串.给出n个m进制字符串\(s_i\),每个字符串的权值为\(v_i\).对于另一个m进制字符串\(S\),设\( ...
- 2019.02.15 codechef Favourite Numbers(二分+数位dp+ac自动机)
传送门 题意: 给444个整数L,R,K,nL,R,K,nL,R,K,n,和nnn个数字串,L,R,K,数字串大小≤1e18,n≤65L,R,K,数字串大小\le1e18,n\le65L,R,K,数字 ...
- [Sdoi2014]数数[数位dp+AC自动机]
3530: [Sdoi2014]数数 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 834 Solved: 434[Submit][Status][ ...
- Codeforces Round #248 (Div. 1) C - Tachibana Kanade's Tofu AC自动机
C - Tachibana Kanade's Tofu 思路:把 n 个串丢进AC自动机中,然后dp就好啦. 我的代码居然是在CF上跑最快的.. #include<bits/stdc++.h&g ...
- 洛谷$P4045\ [JSOI2009]$密码 $dp$+$AC$自动机
正解:$dp$+$AC$自动机+搜索 解题报告: 传送门$QwQ$ 首先显然先建个$AC$自动机,然后考虑设$f_{i,j,k}$表示长度为$i$,现在在$AC$自动机的第$j$个位置,已经表示出来的 ...
- 【hdu3247-Resource Archiver】位压DP+AC自动机+SPFA
题意:给定n个文本串,m个病毒串,文本串重叠部分可以合并,但合并后不能含有病毒串,问所有文本串合并后最短多长. (2 <= n <= 10, 1 <= m <= 1000) 题 ...
- 【HDU3247】 Resource Archiver(DP+AC自动机+最短路)
Resource Archiver Time Limit: 10000MS Memory Limit: 100000KB 64bit IO Format: %I64d & %I64u ...
- POJ 3691 DNA repair (DP+AC自动机)
DNA repair Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 4815 Accepted: 2237 Descri ...
- BZOJ 1559 JSOI2009 密码 状压dp+AC自动机+搜索
题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1559 分析: 这个题意真的是很**啊!!!直接说每一个字符串至少出现一次不就好了吗... ...
随机推荐
- .NET Best Practices
Before starting with best practices tobe followed, it is good to have clear understanding of how mem ...
- 详解ABBYY FineReader 12扫描亮度设置
很多刚接触ABBYY FineReader 12的小伙伴可能出现过这样一个问题:在扫描过程中会显示一条消息以提示更改亮度设置.这是因为你 FineReader扫描设置中亮度未正确设置.下面小编就给小伙 ...
- Openlayers 3计算长度和面积
1.比较粗糙的计算方式 计算长度 var length = lineFeature.getGeometry().getLength(); if (length > 1000) { length ...
- linux下主流的三种远程技术
远程登录操作对于租用服务器的用户来说都不陌生.特别是租用国外服务器的用户来说,更是家常便饭.通过远程登录操作,即使我们人在深圳,也能无差别的操作远在美国的服务器.而对于linux系统下的服务器,目前主 ...
- tomcat8.0 基本参数调优配置
1.优化内核及TCP连接: fs.file-max = 655350 # 系统文件描述符总量 net.ipv4.ip_local_port_range = 1024 65535 # 打开端口范围 ...
- mysql中floor函数的作用是什么?
需求描述: 最近写mysql程序的时候,使用了floor函数,在此记录下该函数的作用 操作过程: 1.使用floor函数的测试 mysql> select floor(1.23),floor(- ...
- python 字符串格式化,使用f前缀
格式化一般用%,但后来推荐用format format有进步,可以用索引或者名字,但仍然没有很方便和快捷 # logger.debug('{} {} {} {} {} {}'.format(metho ...
- dos命令收集
应用程序和进程相关 tasklist /svc 查看计算机当前正在运行程序 taskkill /f /im "eclipse.exe" 关闭指定的应用程序 taskk ...
- Linux+Redis实战教程_day02_3、redis数据类型_4、String命令_5、hash命令_6、java操作redis数据库技术
3. redis数据类型[重点] redis 使用的是键值对保存数据.(map) key:全部都是字符串 value:有五种数据类型 Key名:自定义,key名不要过长,否则影响使用效率 Key名不要 ...
- Python 统计代码量
#统计代码量,显示离10W行代码还有多远 #递归搜索各个文件夹 #显示各个类型的源文件和源代码数量 #显示总行数与百分比 import os import easygui as g #查找文件 def ...