• 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自动机]的更多相关文章

  1. 咕咕(数位dp+AC自动机)

    咕咕(数位dp+AC自动机) 若一个字符串的字符集合是0~m-1,那么称它为m进制字符串.给出n个m进制字符串\(s_i\),每个字符串的权值为\(v_i\).对于另一个m进制字符串\(S\),设\( ...

  2. 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,数字 ...

  3. [Sdoi2014]数数[数位dp+AC自动机]

    3530: [Sdoi2014]数数 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 834  Solved: 434[Submit][Status][ ...

  4. 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 ...

  5. 洛谷$P4045\ [JSOI2009]$密码 $dp$+$AC$自动机

    正解:$dp$+$AC$自动机+搜索 解题报告: 传送门$QwQ$ 首先显然先建个$AC$自动机,然后考虑设$f_{i,j,k}$表示长度为$i$,现在在$AC$自动机的第$j$个位置,已经表示出来的 ...

  6. 【hdu3247-Resource Archiver】位压DP+AC自动机+SPFA

    题意:给定n个文本串,m个病毒串,文本串重叠部分可以合并,但合并后不能含有病毒串,问所有文本串合并后最短多长. (2 <= n <= 10, 1 <= m <= 1000) 题 ...

  7. 【HDU3247】 Resource Archiver(DP+AC自动机+最短路)

    Resource Archiver Time Limit: 10000MS   Memory Limit: 100000KB   64bit IO Format: %I64d & %I64u ...

  8. POJ 3691 DNA repair (DP+AC自动机)

    DNA repair Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 4815   Accepted: 2237 Descri ...

  9. BZOJ 1559 JSOI2009 密码 状压dp+AC自动机+搜索

    题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1559 分析: 这个题意真的是很**啊!!!直接说每一个字符串至少出现一次不就好了吗... ...

随机推荐

  1. .NET Best Practices

    Before starting with best practices tobe followed, it is good to have clear understanding of how mem ...

  2. 详解ABBYY FineReader 12扫描亮度设置

    很多刚接触ABBYY FineReader 12的小伙伴可能出现过这样一个问题:在扫描过程中会显示一条消息以提示更改亮度设置.这是因为你 FineReader扫描设置中亮度未正确设置.下面小编就给小伙 ...

  3. Openlayers 3计算长度和面积

    1.比较粗糙的计算方式 计算长度 var length = lineFeature.getGeometry().getLength(); if (length > 1000) { length ...

  4. linux下主流的三种远程技术

    远程登录操作对于租用服务器的用户来说都不陌生.特别是租用国外服务器的用户来说,更是家常便饭.通过远程登录操作,即使我们人在深圳,也能无差别的操作远在美国的服务器.而对于linux系统下的服务器,目前主 ...

  5. tomcat8.0 基本参数调优配置

    1.优化内核及TCP连接:   fs.file-max = 655350 # 系统文件描述符总量 net.ipv4.ip_local_port_range = 1024 65535 # 打开端口范围 ...

  6. mysql中floor函数的作用是什么?

    需求描述: 最近写mysql程序的时候,使用了floor函数,在此记录下该函数的作用 操作过程: 1.使用floor函数的测试 mysql> select floor(1.23),floor(- ...

  7. python 字符串格式化,使用f前缀

    格式化一般用%,但后来推荐用format format有进步,可以用索引或者名字,但仍然没有很方便和快捷 # logger.debug('{} {} {} {} {} {}'.format(metho ...

  8. dos命令收集

    应用程序和进程相关 tasklist  /svc     查看计算机当前正在运行程序 taskkill /f /im "eclipse.exe"   关闭指定的应用程序 taskk ...

  9. Linux+Redis实战教程_day02_3、redis数据类型_4、String命令_5、hash命令_6、java操作redis数据库技术

    3. redis数据类型[重点] redis 使用的是键值对保存数据.(map) key:全部都是字符串 value:有五种数据类型 Key名:自定义,key名不要过长,否则影响使用效率 Key名不要 ...

  10. Python 统计代码量

    #统计代码量,显示离10W行代码还有多远 #递归搜索各个文件夹 #显示各个类型的源文件和源代码数量 #显示总行数与百分比 import os import easygui as g #查找文件 def ...