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] ...
随机推荐
- dir、help查询
#!/usr/bin/env python li = [] print(dir(li)) help(list)
- grep命令
grep (缩写来自Globally search a Regular Expression and Print)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来. grep ...
- 腾讯QQ你的缓存策略应该改下了
缓存策略基本原则大家都怎么考虑的? 缓存好友数量这个也是醉了,这个数字好像变化频率有点低吧,ok,就算你企鹅用户量大,需要缓存,那肉肉的问一句你这更新策略也不能只管网上涨的,不管往下降的吧?难不成你是 ...
- inline-boock的默认间距
1 2 3 4 div{width:900px;} div li{ display:inline-block; width:300px;} <ul> <li></ ...
- Node.js学习笔记:setImmediate与process.nextTick
通过process.nextTick注册的函数在当前这个事件循环中执行的函数执行完毕后立即执行,相当于把当前的同步代码执行完毕之后,立刻执行所有的通过process.nextTick注册的函数,如果注 ...
- 自学 web 前端人怎么找工作?
1,你做过的项目可以体现你的价值.2,你的个人博客可以反映你的思考.3,你的GitHub页面可以展示你的项目.4,你项目中的代码可以看出你编程的风格.1,2,3,4之间有交集.当你能证明,你能创造的价 ...
- sublime使用小技巧——自动保存后缀名与自动匹配语法
1,打开sublime 2,新建文件 3,ctrl+shift+p 4,输入ss(set syntax),在下拉列表中选择需要的语言 列表很多,可以输入相关快捷键 如:html-->ssh cs ...
- 主流的单元测试工具之-JAVA新特性-Annotation 写作者:组长 梁伟龙
1:什么是Annotation?Annotation,即“@xxx”(如@Before,@After,@Test(timeout=xxx),@ignore),这个单词一般是翻译成元数据,是JAVA的一 ...
- solar system by HTML5
solar system by HTML5 星际穿越感觉很炫酷啊,网易貌似做了个专题在朋友圈挺火的.用canvas模拟太阳系,嗯,不错昂! 代码及效果 See the Pen GgpRjN by Na ...
- 如何让nginx显示文件夹目录
1. 如何让nginx显示文件夹目录 vi /etc/nginx/conf.d/default.conf 添加如下内容: location / { root /data/www/f ...