[SDOI2014]数数
题解:
做过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]数数的更多相关文章
- 【BZOJ】【3530】【SDOI2014】数数
AC自动机/数位DP orz zyf 好题啊= =同时加深了我对AC自动机(这个应该可以叫Trie图了吧……出边补全!)和数位DP的理解……不过不能自己写出来还真是弱…… /************* ...
- BZOJ3530: [Sdoi2014]数数
3530: [Sdoi2014]数数 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 322 Solved: 188[Submit][Status] ...
- 【HDU3530】 [Sdoi2014]数数 (AC自动机+数位DP)
3530: [Sdoi2014]数数 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 682 Solved: 364 Description 我们称一 ...
- BZOJ 3530: [Sdoi2014]数数 [AC自动机 数位DP]
3530: [Sdoi2014]数数 题意:\(\le N\)的不含模式串的数字有多少个,\(n=|N| \le 1200\) 考虑数位DP 对于长度\(\le n\)的,普通套路DP\(g[i][j ...
- 「SDOI2014」数数 解题报告
「SDOI2014」数数 题目描述 我们称一个正整数 \(N\) 是幸运数,当且仅当它的十进制表示中不包含数字串集合 \(S\) 中任意一个元素作为其子串. 例如当 \(S=(\)22, 333, 0 ...
- 3530: [Sdoi2014]数数
3530: [Sdoi2014]数数 链接 分析: 对给定的串建立AC自动机,然后数位dp.数位dp的过程中,记录当前在AC自动机的哪个点上,保证不能走到出现了给定串的点. 代码: #include& ...
- [SDOI2014]数数 --- AC自动机 + 数位DP
[SDOI2014]数数 题目描述: 我们称一个正整数N是幸运数,当且仅当它的十进制表示中不包含数字串集合S中任意一个元素作为其子串. 例如当S=(22,333,0233)时,233是幸运数,2333 ...
- bzoj [Sdoi2014]数数 AC自动机上dp
[Sdoi2014]数数 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1264 Solved: 636[Submit][Status][Discu ...
- [Sdoi2014]数数[数位dp+AC自动机]
3530: [Sdoi2014]数数 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 834 Solved: 434[Submit][Status][ ...
- [bzoj3530][Sdoi2014]数数_AC自动机_数位dp
数数 bzoj-3530 Sdoi-2014 题目大意:给你一个整数集合,求所有不超过n的正整数,是的它的十进制表示下不能再一段等于集合中的任意数. 注释:$1\le n \le 1200$,$1\l ...
随机推荐
- mysql 架构~mgr具体细节分析
一 简介:今天咱们来聊聊mgr的具体实现细节 二 关于多点写入的锁冲突问题以及处理: certify模块主要负责检查事务是否允许提交,是否与其它事务存在冲突,如两个事务可能修改同一行数据.在单机系 ...
- 【apache tika】apache tika获取文件内容(与FileUtils的对比)
Tika支持多种功能: 文档类型检测 内容提取 元数据提取 语言检测 重要特点: 统一解析器接口:Tika封装在一个单一的解析器接口的第三方解析器库.由于这个特征,用户逸出从选择合适的解析器库的负担, ...
- Linux内存管理5---物理内存管理
1.前言 本文所述关于内存管理的系列文章主要是对陈莉君老师所讲述的内存管理知识讲座的整理. 本讲座主要分三个主题展开对内存管理进行讲解:内存管理的硬件基础.虚拟地址空间的管理.物理地址空间的管理. 本 ...
- C# 多种方式连接Oracle。
废话不多说直接正题: 首先我们先在Oracle数据库下建了一个用户叫做lisi,密码为lisi,在这个用户下建立一张表叫做“USERS”,在这个表下新增三个数据. 方式一:利用OleDb连接Oracl ...
- python下的socket常用方法举例
python下的socket 1.简单的server和client端的socket代码 server.py: #!/usr/bin/env python #_*_ coding:utf-8 _*_ i ...
- CentOS6.5编译安装Nginx1.8.1+MySQL5.5.48+PHP5.2.17+xcache3.2+ZendOptimizer-3.3.9
一.安装Nginx: 1.解决依赖关系 编译安装nginx需要事先需要安装开发包组"Development Tools"和 "Development Libraries& ...
- DNS详解: A记录,子域名,CNAME别名,PTR,MX,TXT,SRV,TTL
DNS DNS,Domain Name System或者Domain Name Service(域名系统或者域名服务).域名系统为Internet上的主机分配域名地址和IP地址.由于网络中的计算机都必 ...
- vue系列之项目结构
参考地址:链接 build webpack配置相关 config webpack配置相关 node_modules npm install 安装的依赖代码库 src 存放项目源码 static 存 ...
- SQL类型转换和数学函数
- 【mysql】autocommit=0后,commit, rollback无效
之前在[mysql]MySQLdb中的事务处理中用autocommit和commit()以及rollback()实现了事务处理. 但后来,用同样的代码在另一个数据库中运行却失败了.找了一个下午的原因. ...