bzoj 3530: [Sdoi2014]数数
#include<cstdio>
#include<iostream>
#include<cstring>
#define M 1509
#define MO 1000000007
#define ll long long
using namespace std;
char a[M];
int b[M],c[M],n,shu[M][],tot=,m,n1,fail[M],q[M],f[][][];
ll ans;
bool bo[M];
void dp(int a1)
{
for(int i=;i<=tot;i++)
for(int l=;l<=;l++)
{
if(bo[i]||!f[a1-][i][l])
continue;
for(int j=;j<=;j++)
{
int k=i;
for(;!shu[k][j];k=fail[k]);
f[a1][shu[k][j]][l+j>b[a1]]=(f[a1][shu[k][j]][l+j>b[a1]]+f[a1-][i][l])%MO;
if(!j)
f[a1][shu[k][j]][]=(f[a1][shu[k][j]][]+f[a1-][i][l])%MO;
}
}
return;
}
int main()
{
scanf("%s",a+);
n=strlen(a+);
for(int i=;i<=n;i++)
b[n-i+]=a[i]-'';
scanf("%d",&m);
for(int i=;i<=m;i++)
{
scanf("%s",a+);
n1=strlen(a+);
for(int j=;j<=n1;j++)
c[n1-j+]=a[j]-'';
int now=;
for(int j=;j<=n1;j++)
if(shu[now][c[j]])
now=shu[now][c[j]];
else
{
shu[now][c[j]]=++tot;
now=tot;
}
bo[now]=;
}
for(int i=;i<=;i++)
shu[][i]=;
int h=,t=;
q[]=;
for(;h<t;)
{
h++;
int p=q[h];
for(int i=;i<=;i++)
if(shu[p][i])
{
q[++t]=shu[p][i];
int k=fail[p];
for(;!shu[k][i];k=fail[k]);
fail[shu[p][i]]=shu[k][i];
}
}
f[][][]=;
for(int i=;i<=n;i++)
dp(i);
for(int i=;i<n;i++)
for(int j=;j<=tot;j++)
if(!bo[j])
ans=(ans+(ll)f[i][j][]+f[i][j][]-f[i][j][])%MO;
for(int i=;i<=tot;i++)
if(!bo[i])
ans=(ans+f[n][i][]-f[n][i][])%MO;
printf("%lld\n",ans);
return ;
}
AC自动机上跑数位DP
bzoj 3530: [Sdoi2014]数数的更多相关文章
- BZOJ 3530: [Sdoi2014]数数 [AC自动机 数位DP]
		
3530: [Sdoi2014]数数 题意:\(\le N\)的不含模式串的数字有多少个,\(n=|N| \le 1200\) 考虑数位DP 对于长度\(\le n\)的,普通套路DP\(g[i][j ...
 - [BZOJ 3530] [Sdoi2014] 数数 【AC自动机+DP】
		
题目链接:BZOJ - 3530 题目分析 明显是 AC自动机+DP,外加数位统计. WZY 神犇出的良心省选题,然而去年我太弱..比现在还要弱得多.. 其实现在做这道题,我自己也没想出完整解法.. ...
 - bzoj 3530: [Sdoi2014]数数 数位dp
		
题目 我们称一个正整数N是幸运数,当且仅当它的十进制表示中不包含数字串集合S中任意一个元素作为其子串.例如当S=(22,333,0233)时,233是幸运数,2333.20233.3223不是幸运数. ...
 - BZOJ 3530 [SDOI2014]数数 (Trie图/AC自动机+数位DP)
		
题目大意:略 裸的AC自动机+数位DP吧... 定义f[i][x][0/1]表示已经匹配到了第i位,当前位置是x,0表示没到上限,1到上限,此时数是数量 然而会出现虚拟前导零,即前几位没有数字的情况, ...
 - [BZOJ 3530][Sdoi 2014]数数
		
阿拉~好像最近总是做到 AC 自动机的题目呢喵~ 题目的算法似乎马上就能猜到的样子…… AC 自动机 + 数位 dp 先暴力转移出 f[i][j] :表示从 AC 自动机上第 j 号节点走 i 步且不 ...
 - 【BZOJ】【3530】【SDOI2014】数数
		
AC自动机/数位DP orz zyf 好题啊= =同时加深了我对AC自动机(这个应该可以叫Trie图了吧……出边补全!)和数位DP的理解……不过不能自己写出来还真是弱…… /************* ...
 - 3530: [Sdoi2014]数数
		
3530: [Sdoi2014]数数 链接 分析: 对给定的串建立AC自动机,然后数位dp.数位dp的过程中,记录当前在AC自动机的哪个点上,保证不能走到出现了给定串的点. 代码: #include& ...
 - bzoj [Sdoi2014]数数 AC自动机上dp
		
[Sdoi2014]数数 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1264 Solved: 636[Submit][Status][Discu ...
 - BZOJ3530: [Sdoi2014]数数
		
3530: [Sdoi2014]数数 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 322 Solved: 188[Submit][Status] ...
 
随机推荐
- css优先级问题
			
关于CSS specificityCSS 的specificity 特性或称非凡性,它是衡量一个衡量CSS值优先级的一个标准,既然作为标准,就具有一套相关的判定规定及计算方式,specificity用 ...
 - EXCEL表格实现万位分隔符效果!
			
单击单元格右键 选择自定义单元格格式 选择数字标签 选择自定义 在输入框中输入:###","#### 单击确定即可! 格式刷可以对其他单元格实行同样效果!
 - My first python script for work
			
I write it yesterday to watch the NE process(rcpfd,cfgd) automatically, then i will write a window t ...
 - Tomcat内部结构及工作原理学习
			
Tomcat原本是Servlet/JSP的一个调试工具,后来才发展为一个Servlet/JSP的容器. Tomcat作为Servlet容器,负责处理客户请求,把请求传送给Servlet并把结果返回给客 ...
 - 记一次python编码错误
			
摘要: 断断续续写python一段时间了,让我说python最令我头疼的问题,莫过于编码问题.最近做大论文,使用python再次出现编码报错.错误如下: "UnicodeEncodeErro ...
 - laravel安装学习步骤
			
在看知乎比较php框架的优劣的时候提到为什么laravel这么好国内用的少,还有就是yii2,有人提到原因就是composer在国内无法使用.这制约了使用composer进行包管理的框架在国内的传播和 ...
 - .NET开源项目
			
综合类 微软企业库 微软官方出品,是为了协助开发商解决企业级应用开发过程中所面临的一系列共性的问题, 如安全(Security).日志(Logging).数据访问(Data Access).配置管 ...
 - 【转】linux中do{...} while(0)的解释
			
在看ldlm的代码过程中遇到了一个很奇怪的问题,有很多宏定义使用了do while(0)这种看起来好像没啥用的代码.然后我就问问师兄,才得知,这种用法很常见,自己又查了一下资料,原来在linux内核代 ...
 - 【转】部分电脑安装升级 ubuntu 12.04 后无法挂起问题的解决(挂起无法唤醒同样有效)
			
原文地址:http://blog.csdn.net/longerzone/article/details/7860232 我的Ubuntu12.04是安装的windows桌面安装版(使用wubi安装) ...
 - SPSS数据分析—判别分析
			
判别分析作为一种多元分析技术应用相当广泛,和其他多元分析技术不同,判别分析并没有将降维作为主要任务,而是通过建立判别函数来概括各维度之间的差异,并且根据这个判别函数,将新加入的未知类别的样本进行归类, ...