题解:

做过ac自动机上dp的这题应该就很容易想到了

首先在ac自动机上搞dp

表示当前考虑了i位,在自动机的j位上

然后转移就可以了

考虑限制

显然是一个数位dp

考虑位数小于n显然满足要求

考虑位数等于n

令f[i][j][0/1]表示前i位,自动机j上,与限制是否重合 然后枚举转移就行了

另外就是对于位数比它少的再做一次(否则的话有前导零可能会让答案变小)

代码:

#include <bits/stdc++.h>
using namespace std;
#define N 2000
#define mo 1000000007
char cc[N];
int x1[N],x2[N],c[][],val[],fail[];
int dp[][][],cnt;
bool tt=;
void insert(char *cc)
{
int len=strlen(cc),now=;
for (int i=;i<len;i++)
{
int v=cc[i]-'';
if (!c[now][v]) c[now][v]=++cnt;
now=c[now][v];
}
val[now]=;
}
queue<int> q;
void build()
{
for (int i=;i<=;i++)
if (c[][i]) fail[c[][i]]=,q.push(c[][i]);
while (!q.empty())
{
int u=q.front(); q.pop();
for (int i=;i<=;i++)
{
if (c[u][i])
{
fail[c[u][i]]=c[fail[u]][i];
q.push(c[u][i]);
} else c[u][i]=c[fail[u]][i];
val[c[u][i]]|=val[c[fail[u]][i]];
}
}
}
void plus2(int &x,int y)
{
x+=y;
x=x%mo;
}
bool pd(int x,int y)
{
if(x==&&y==) return(false);
else return(true);
}
int main()
{
freopen("noi.in","r",stdin);
freopen("noi.out","w",stdout);
std::ios::sync_with_stdio(false);
cin>>cc;
int n,m,len=strlen(cc);
n=len;
for (int i=;i<len;i++)
x1[i]=cc[i]-'';
cin>>m;
for (int i=;i<=m;i++)
{
cin>>cc;
insert(cc);
}
build();
dp[][][]=;
for (int i=;i<=n-;i++)
for (int j=;j<=cnt;j++)
// if (dp[i][j])
{
for (int k=;k<=;k++)
if (!val[c[j][k]]&&(pd(i,k)))
plus2(dp[i+][c[j][k]][],dp[i][j][]);
for (int k=;k<=x1[i]-;k++)
if (!val[c[j][k]]&&(pd(i,k)))
plus2(dp[i+][c[j][k]][],dp[i][j][]);
if (!val[c[j][x1[i]]])
plus2(dp[i+][c[j][x1[i]]][],dp[i][j][]);
}
int ans=;
for (int i=;i<=cnt;i++)
plus2(ans,dp[n][i][]),plus2(ans,dp[n][i][]);
memset(dp,,sizeof(dp));
dp[][][]=;
for (int i=;i<=n-;i++)
for (int j=;j<=cnt;j++)
{
for (int k=;k<=;k++)
if (!val[c[j][k]]&&(pd(i,k)))
plus2(dp[i+][c[j][k]][],dp[i][j][]);
}
for (int i=;i<=n-;i++)
for (int j=;j<=cnt;j++)
plus2(ans,dp[i][j][]);
cout<<ans;
return ;
}

[SDOI2014]数数的更多相关文章

  1. 【BZOJ】【3530】【SDOI2014】数数

    AC自动机/数位DP orz zyf 好题啊= =同时加深了我对AC自动机(这个应该可以叫Trie图了吧……出边补全!)和数位DP的理解……不过不能自己写出来还真是弱…… /************* ...

  2. BZOJ3530: [Sdoi2014]数数

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

  3. 【HDU3530】 [Sdoi2014]数数 (AC自动机+数位DP)

    3530: [Sdoi2014]数数 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 682  Solved: 364 Description 我们称一 ...

  4. BZOJ 3530: [Sdoi2014]数数 [AC自动机 数位DP]

    3530: [Sdoi2014]数数 题意:\(\le N\)的不含模式串的数字有多少个,\(n=|N| \le 1200\) 考虑数位DP 对于长度\(\le n\)的,普通套路DP\(g[i][j ...

  5. 「SDOI2014」数数 解题报告

    「SDOI2014」数数 题目描述 我们称一个正整数 \(N\) 是幸运数,当且仅当它的十进制表示中不包含数字串集合 \(S\) 中任意一个元素作为其子串. 例如当 \(S=(\)22, 333, 0 ...

  6. 3530: [Sdoi2014]数数

    3530: [Sdoi2014]数数 链接 分析: 对给定的串建立AC自动机,然后数位dp.数位dp的过程中,记录当前在AC自动机的哪个点上,保证不能走到出现了给定串的点. 代码: #include& ...

  7. [SDOI2014]数数 --- AC自动机 + 数位DP

    [SDOI2014]数数 题目描述: 我们称一个正整数N是幸运数,当且仅当它的十进制表示中不包含数字串集合S中任意一个元素作为其子串. 例如当S=(22,333,0233)时,233是幸运数,2333 ...

  8. bzoj [Sdoi2014]数数 AC自动机上dp

    [Sdoi2014]数数 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 1264  Solved: 636[Submit][Status][Discu ...

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

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

  10. [bzoj3530][Sdoi2014]数数_AC自动机_数位dp

    数数 bzoj-3530 Sdoi-2014 题目大意:给你一个整数集合,求所有不超过n的正整数,是的它的十进制表示下不能再一段等于集合中的任意数. 注释:$1\le n \le 1200$,$1\l ...

随机推荐

  1. ECharts(中国地图)的使用 及 非空 tooltip formatter 验证

    中国地图使用频率很高下载文件:        echarts.min.js网址:               http://echarts.baidu.com/download.html点击:     ...

  2. C++中模板的使用

    为什么使用模板: C++重载(overloading),重载函数一般含有不同的参数个数或不同的参数类型.如果使用MAX函数对不同类型的求最大值,就要定义不同的重载函数: int max(int x,i ...

  3. Java EE之Form的get与post方法

    Form表单中method="post/get'的区别 Form提供了两种数据传输的方式——get和post.虽然它们都是数据的提交方式,但是在实际传输时确有很大的不同,并且可能会对数据产生 ...

  4. ABAP知识点笔记

    1,获取光标所在行 READ TABLE TD_ALV_DATA INTO TH_ALV_DATA INDEX RS_SELFIELD-TABINDEX. 2,获取alv可编辑单元格内容 DATA: ...

  5. C - Least Crucial Node

    题目链接:https://cn.vjudge.net/contest/247936#problem/C 具体大意:给你起点和中点,总点数,边数.求到终点的最小割点. 具体思路:可以用tarjan算法来 ...

  6. DSO windowed optimization 公式

    这里有一个细节,我想了很久才想明白,DSO 中的 residual 联系了两个关键帧之间的相对位姿,但是最终需要优化帧的绝对位姿,中间的导数怎么转换?这里使用的是李群.李代数中的Adjoint. 参考 ...

  7. XML解析技术简介——(一)

  8. Struts局部异常与全局异常处理

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAowAAAG3CAIAAACxBJNyAAAgAElEQVR4nOy9z6tk15Ymdv4B0eRU8O

  9. ARMV8 Procedure Call Standard

    1.前言 2.  术语说明 Term Note ABI Application Binary Interface 应用程序二进制接口 EABI Embedded ABI  嵌入式ABI PCS Pro ...

  10. CAS 策略已被 .NET Framework 弃用

    背景 本来想这里有啥写的,就算了吧.突然看到dev了,我的天啊,这个.net大神,坑了多少开发人员了.功能太强大,以至于后来很长时间我都不知道jquery.当时为了操作dev,为了实现一个功能,都把官 ...