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 分析: 这个题意真的是很**啊!!!直接说每一个字符串至少出现一次不就好了吗... ...
随机推荐
- lkl风控.随机森林模型测试代码spark1.6
/** * Created by lkl on 2017/10/9. */ import org.apache.spark.sql.hive.HiveContext import org.apache ...
- MD5 哈希等各种加密方式 都是对这个对象进行各种运算, 然后得出1个字符串
你列出的4个 都是对对象的 加密算法
- 自建Nuger Server拾遗
企业内部的包需要通过nuget来管理发布,或者一些不允许上外网的企业,通过自己的nuget服务器来使用nuget,都会考虑到自建一个nuget服务器.本文整理了一些有用的链接和使用心得,以备不时之需. ...
- vue select下拉框绑定默认值
vue select下拉框绑定默认值: 首先option要加value值,以便v-model可以获取到对应选择的值 一.当没有绑定v-model,直接给对应的option加selected属性 二.当 ...
- android project 文件夹
android多国语言文件夹 http://www.blogjava.net/zhaojianhua/archive/2012/02/09/369676.html Android平板开发精确适配不同的 ...
- Spring3+mybatis3在多数据源情况下找不到数据库驱动的问题
解决问题的过程如下: 1.遇到问题和一般的解决方法和下面这个帖子的一样: http://www.oschina.net/question/188964_32305 2.我在按照1的做法配置了以后,依然 ...
- Android Call(打电话)的基本知识详解
- 输入控件tagsinput
摘要: tagsinput是一款基于jQuery的插件.具有组织输入内容.校验.backspace删除等功能.当你在输入框输入结束按下enter键,tagsinput会将你输入的内容用标签封装,每 ...
- 一个基于jquery的智能提示控件intellSeach.js
一.需求 我们经常会遇到[站内搜索]的需求,为了提高用户体验,我们希望能做到像百度那样的即时智能提示.例如:某公司人事管理系统,想搜索李XX,只要输入“李”,系统自然会提示一些姓李的员工,这样方便用户 ...
- H5开发HybridApp
1 H5开发 开发HybridApp一般都是先完成H5部分,所谓的H5就是Html5页面,开发的时候我们在PC机上的浏览器调试即可,这里推荐Chrome F12模式. 在调试服务器请求数据部分要给ch ...