[BZOJ]3530 [SDOI2014] 数数 AC自动机 + DP

CVPR 2026 即插即用 | 注意力篇 | PFG:多尺度大核+像素级频率门控,特征显著增强,精准适配边缘纹理场景 本文提出了一种基于频率引导的轻量级外围门控模块PFG,用于高效时空预测学习。该模块通过多尺度大核分解卷积(1×K + K×1)捕捉外围空间依赖,同时利用固定频率滤波器提取高频线索,动态融合不同尺度的外围特征。核心创新包括:外围聚焦的多尺度空间增强、频率引导的动态融合机制、双阶段归一化协同等。实验表明,PFGNet在多个基准数据集上达到SOTA性能,同时保持较低计算复杂度。该模块可直接嵌入各类视觉模型,适用于需要强化空间-通道协同表达的轻量级任务。 阅读详情

3530: [Sdoi2014]数数

Time Limit: 10 Sec   Memory Limit: 512 MB
Submit: 1226   Solved: 618
[ Submit][ Status][ Discuss]

Description

我们称一个正整数N是幸运数,当且仅当它的十进制表示中不包含数字串集合S中任意一个元素作为其子串。例如当S=(22,333,0233)时,233是幸运数,2333、20233、3223不是幸运数。
    给定N和S,计算不大于N的幸运数个数。

Input


    输入的第一行包含整数N。
    接下来一行一个整数M,表示S中元素的数量。
    接下来M行,每行一个数字串,表示S中的一个元素。

Output

    输出一行一个整数,表示答案模109+7的值。

Sample Input

20
3
2
3
14

Sample Output

14

HINT

 下表中l表示N的长度,L表示S中所有串长度之和。


1 < =l < =1200 , 1 < =M < =100 ,1 < =L < =1500

Source

[ Submit][ Status][ Discuss]


HOME Back

  又是这种不能包含xxx长度为yyy的字符串有多少个的题... 按照之前的做法想了个矩阵乘法的做法, 发现不仅时间要T(由于<=所以无法快速幂)而且无法处理<=n的正整数这个条件.

  那么对于这种计数题显然只能AC自动机上DP辣... 考虑<=n, n很大显然不能作为dp数组中的某一维, 那么怎么记录<=n这个条件是否满足呢? 可以考虑像数位DP那样直接记录当前是否顶位来判断. 而且关于幸运数字中的0还得和前导零区分开, 于是又得拿一维来记录当前是否是前导零状态. 那么dp数组就呼之欲出了, dp[i][j][k][t]表示当前长度为i走到j号节点是否顶位是否是前导零的字符串数. 转移比较简单.

  有几个需要注意的是刷表式过程中如果当前既是前导零状态下一个又是零的话那么只能转移到0号节点去, 而不是当前节点0号儿子去, 这点需要注意. 还有就是第一个数字是前导零状态但同时也有顶位限制(代码中!i的部分), 这个特判一下就行了.

#include<bits/stdc++.h>
using namespace std;
const int maxn = 1505;
const int mod = 1e9 + 7;
bool vis[maxn];
char ss[maxn], str[maxn];
int n, m, tot, ans, cnt, f[maxn][maxn][2][2];
int c[maxn][11], fail[maxn];
inline void insert() {
	int p = 0;
	for (int i = 0; ss[i]; ++ i) {
		int idx = ss[i] - '0';
		if (!c[p][idx]) c[p][idx] = ++ tot;
		p = c[p][idx];
	}
	vis[p] = true;
}
queue<int> q;
inline void bfs() {
	for (int i = 0; i < 10; ++ i)
		if (c[0][i]) q.push(c[0][i]);
	while (!q.empty()) {
		int u = q.front(); q.pop();
		for (int i = 0; i < 10; ++ i) {
			int &v = c[u][i];
			if (!v) {v = c[fail[u]][i]; continue;}
			fail[v] = c[fail[u]][i], vis[v] |= vis[fail[v]];
			q.push(v);
		}
	}
}
inline void add(int &a, int b) {
	a += b;
	if (a >= mod) a -= mod;
}
inline void dp() {
	f[0][0][0][0] = 1;
	for (int i = 0; i < n; ++ i)
		for (int j = 0; j <= tot; ++ j)
			for (int k = 0; k < 2; ++ k)
				for (int t = 0; t < 2; ++ t)
					if (f[i][j][k][t]) {
						int lim = (k || !i) ? str[i] - '0' : 9;
						for (int p = 0; p <= lim; ++ p) {
							int son = c[j][p];
							if (!p && !t) add(f[i + 1][0][0][0], f[i][j][k][t]);
							if (vis[son] || (!p && !t)) continue;
							add(f[i + 1][son][(k || !i) && (p == lim)][p || t], f[i][j][k][t]);
						}
					}
	for (int i = 0; i <= tot; ++ i)
		if (!vis[i])
			for (int j = 0; j < 2; ++ j)
				add(ans, f[n][i][j][1]);
}
int main() {
	scanf("%s", str);
	n = strlen(str);
	scanf("%d", &m);
	for (int i = 0; i < m; ++ i) {
		scanf("%s", ss);
		insert();
	}
	bfs(), dp();
	printf("%d\n", ans);
}


电阻抗成像肺功能测试数据分析与直方图生成 本文介绍了基于MATLAB的电阻抗成像(EIT)肺功能测试数据分析方法。研究针对32×32像素的EIT图像序列,通过三步算法处理:首先计算特定时间点与谷值图像的差值,然后分析1秒后峰值与1秒值的差值,最终计算比值矩阵并处理异常值。系统展示了数据预处理、关键时间点检测、比值计算及统计分析的全流程,包括生成概率分布直方图和空间分布图等可视化方法。该分析为无创肺功能评估提供量化指标,可应用于临床呼吸监测和疾病诊断。 阅读详情

相关推荐

设计数据库 ER 图太麻烦?不妨试试这两款工具,自动生成数据库 ER 图!!!

告别手动画图,提高效率~

楼下小黑哥 2万+

学校热身赛(部分)

学习笔记,仅供参考! A.小Z的提问 描述:在一个二维的坐标轴中,小Z所在的坐标是原点 (0,0) ,它的目标坐标是 (x,y) ,它想要知道它从原点到目标的最少移动次数为多少。已知小Z可以从一个点移动到任意一个点,但是两点之间的直线距离必须为一个整数。输入:一行输入两个整数 x 和 y 。( 0 ≤ x,y ≤ 10^5 ) 输出:一行输出一个整数,表示最少移动次数。输入样例 1: 3 4输出样例 1: 1 #include <iostream> #include &lt...

weixin_62707591的博客 692

LangChain实战:用FAISS搭建本地文档问答系统(含Word文件处理避坑指南)

本文详细介绍了如何利用LangChain框架和FAISS向量数据库构建本地化智能文档问答系统,特别针对Word文档处理中的技术难点提供实用解决方案。通过模块化设计、本地化支持和多格式兼容,实现高效文档处理与精准问答,满足企业对数据隐私和安全的需求。

o4p5q6r7s的博客 408

[bzoj3530][SDOI2014]数数

题目描述求不大于N的所有正整数中有多少个满足以下条件的数:给定字符串集合S,把该数当作字符串(没有前导0),集合S中没有任意一个字符串是该字符串的子集。 N的长度不超过1200,集合中所有字符串长度和不超过1500。AC自动机上的DP将集合内所有字符串建出一颗AC自动机。 那么,我们需要预处理一个这样的next[i,j]表示在结点i上接下要走j的话会调整到的结点是什么。(即预处理所有可能出现的调

不来也不去的一只失忆蝴蝶 868

win10删除vmware12后,重新安装失败(遗留注册表问题)解决总结

之前安装过一次VMware虚拟机,后来由于某些已遗忘原因把它卸载了,但是没有卸载完全,为以后安装留下了一些麻烦,现在根据我google很多内容总结后写下了自己的解决办法。 一些我搜的的可以用的VM12的注册码 5A02H-AU243-TZJ49-GTC7K-3C61N ZZ510-DYX47-48ERP-D6XZG-YCKU2 YV5MU-2FX5H-M841P-LZX5X-PYHX8

Jeason的博客 2万+

量化实战:用三种波动率模型给你的期货策略做个“体检”(附Python代码与螺纹钢案例)

本文深入探讨了三种专业波动率模型(Parkinson、Garman-Klass和Rogers-Satchell)在期货量化策略中的应用,并以螺纹钢期货为例,展示了如何通过Python实现这些模型进行多维度波动率分析。文章详细比较了不同模型的特点和适用场景,提供了动态仓位管理、止损策略优化等实战应用方案,帮助交易者更精准地评估市场风险,优化策略表现。

weixin_26824299的博客 460

[BZOJ3530] [Sdoi2014]数数 && AC自动机+dp

首先要建立AC自动机 然后模板串可能前面出现0 处理起来可能会有点麻烦 所以我们干脆直接把模板串倒着插入 然后在Trie中进行dp 用d[i][j][0] 表示在第i个节点 枚举到第j位 且第j位没有超过N的方案数(d[i][j][1]则为超过了 至于为什么要统计超过了的数的个数 是因为我们是从低位开始开始确定这个数的 所以之后的位数如果小于N 那么整体是不会超过N的) #include #

shiyukun1998的专栏 1174

pi-star图形界面安装指南

pi-star图形界面安装指南,MMDVM热点安装,树莓派3B+热点

blueisman的专栏 1908

【BZOJ 3530】 [Sdoi2014]数数

AC自动机上的dp~

Regina8023 1949

YOLOv8的二次创新 | 结合iRMB与EMA打造全新的iEMA机制,提升动态检测性能【附保姆级代码】

YOLOv8继承了YOLO系列的轻量化和高效检测特性,同时通过改进的架构设计使得其在实时场景下具有更高的检测精度。然而,随着检测需求的增加,尤其是在动态目标检测和长时间序列检测中,YOLOv8的鲁棒性依然可以提升。通过iEMA机制的引入,我们将在这些方面进行进一步优化。iRMB模块是我们对传统Residual Block的进一步改进。通过多层特征提取,iRMB能够捕捉更多层次的特征信息,并通过引入轻量化的残差结构,提升计算效率。

一键难忘的博客 3084

bzoj3530【SDOI2014】数数

AC自动机+动态规划

AaronPolaris 2880

CKA-CN考试之路----2

部分知道就可以了,考试不用输入,后面不再复述.这里我们需要将两端内容凭借成1个yaml。执行题目中给的的命令进行测试。

Q先生 241

bzoj3530 [Sdoi2014]数数(AC自动机+数位DP)

bzoj3530 [Sdoi2014]数数原题地址:http://www.lydsy.com/JudgeOnline/problem.php?id=3530题意: 我们称一个正整数N是幸运数,当且仅当它的十进制表示中不包含数字串集合S中任意一个元素作为其子串。例如当S=(22,333,0233)时,233是幸运数,2333、20233、3223不是幸运数。 给定N和S,计算不大于N的幸运数

Bfk的博客 506

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

【BZOJ3530】[Sdoi2014]数数 AC自动机+数位DP

【BZOJ3530】[Sdoi2014]数数 Description 我们称一个正整数N是幸运数,当且仅当它的十进制表示中不包含数字串集合S中任意一个元素作为其子串。例如当S=(22,333,0233)时,233是幸运数,2333、20233、3223不是幸运数。 给定N和S,计算不大于N的幸运数个数。 Input 输入的第一行包含整数N。 接...

aodanchui1057的博客 135

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

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

数数 bzoj-3530 Sdoi-2014 题目大意:给你一个整数集合,求所有不超过n的正整数,是的它的十进制表示下不能再一段等于集合中的任意数。 注释:$1\le n \le 1200$,$1\le |S|\le 100$,$1\le L\le 1500$,L是总长度之和。 想法:咳咳,显然,我们... ...什么都不想,看着能开下先把AC自动机扔出来 然后,其实数位dp就可...

dianan0938的博客 106

bzoj 3530[Sdoi2014]数数 - AC自动机 + dp

3530: [Sdoi2014]数数 Time Limit:10 SecMemory Limit:512 MB Description 我们称一个正整数N是幸运数,当且仅当它的十进制表示中不包含数字串集合S中任意一个元素作为其子串。例如当S=(22,333,0233)时,233是幸运数,2333、20233、3223不是幸运数。 给定N和S,计算不大于N的幸运...

170

【bzoj3530】【sdoi2014】【数数】【AC自动机+数位dp】

Description 我们称一个正整数N是幸运数,当且仅当它的十进制表示中不包含数字串集合S中任意一个元素作为其子串。例如当S=(22,333,0233)时,233是幸运数,2333、20233、3223不是幸运数。     给定N和S,计算不大于N的幸运数个数。 Input     输入的第一行包含整数N。     接下来一行一个整数M,表示S中元素的数量。

sunshinezff的专栏 729

【SDOI2014/BZOJ3530】数数 AC自动机+数位DP

原题走这里 数位DP+AC自动机似乎是常见套路? 首先题目一看就能想到数位DP。同时题目还涉及到多模式串匹配,于是又要用到AC自动机。 于是,我们可以初步得到状态d[i][j]d[i][j]d[i][j],表示当前在第i位,在AC自动机中匹配到第j个节点时的方案数。 然而有以下几个问题: 第一,题目要求的是比n小的满足条件的数的个数,按照经典做法,我们应该加一维表示第i位之前是否与n相同...

CRTorlonia的博客 366

BZOJ 3530: [Sdoi2014]数数 AC自动机+dp

思路不难,但是细节还是挺多的,要格外注意一下. code: #include <cstdio> #include <queue> #include <cstring> #include <algorithm> #define N 2005 #define ll long long #define mod 1000...

EM LGH 120

【BZOJ3530】【SDOI2014】—数数(Ac自动机+数位dp)

传送门 f[0/1][j][k]f[0/1][j][k]f[0/1][j][k]表示有无限制,匹配到jjj位,在自动机上的点kkk的方案数 瞎dpdpdp就完了 注意前导0的情况,比如限制012301230123,但123123123是合法的 #include<bits/stdc++.h> using namespace std; #define gc getchar inline ...

Stargazer的博客 203

[BZOJ3530][Sdoi2014]数数(AC自动机+数位dp)

题目描述传送门题解今天胡策gty竟然原搬sdoi原题… 写完顺手过了样例,写暴力对拍竟然不出错!自己也吃了一惊,感觉稳得很 结果没处理前导0…GG把所有的数字串丢到AC自动机里去 f[i][j][0/1][0/1]表示第i位数,匹配到AC自动机的第j个节点,现在是否填过不为0的数,是否卡上界的方案数 处理前导0的时候就是如果前面没有填过不为0的数那么一直停留在AC自动机的根节点 注意fai

zyf2000 918

bzoj 3530 [Sdoi2014]数数 AC自动机+数位dp

题面 题目传送门 解法 感觉在AC自动机上dp挺套路的 建出Trie图之后,我们可以很自然地表示出状态f[0/1][i][j]f[0/1][i][j]f[0/1][i][j]表示已经做到了第iii位,并且在自动机第jjj个位置,当前的数是否达到上界的数的个数 然后转移还是挺方便的,只要枚举下一位是什么,在自动机上的哪一个位置,和普通的数位dp差不多,我就不详细写转移方程了 然而,这就...

mysterynoip的博客 199

[BZOJ3530][SDOI2014]数数(AC自动机+数位dp)

题目: 我是超链接 题解: 我们先把数字串安置在AC自动机上 f[i][j][0/1][0/1]表示第i位数,匹配到AC自动机的第j个节点,现在是否填过不为0的数,是否卡上界的方案数 处理前导0的时候就是如果前面没有填过不为0的数那么一直停留在AC自动机的根节点 注意fail指针的下传 这个前导零是个什么情况呢?N=111 00∈S 那么001也是合法的啊 这个第四维表示是否卡...

薇小薇 279

[bzoj3530][Sdoi2014]数数【AC自动机】【数位DP】

【题目链接】   https://www.lydsy.com/JudgeOnline/problem.php?id=3530 【题解】   把所有数字串S建立AC自动机,在自动机上DP即可,注意数字串可以有前导零,但你的数不行。   时间复杂度O(l∗L∗10)O(l∗L∗10)O(l*L*10) 【代码】 # include &lt;bits/stdc++.h&gt; # defin...

D_Vanisher的博客 328

[BZOJ 3530] [Sdoi2014] 数数 【AC自动机+DP】

题目链接:BZOJ - 3530 题目分析 明显是 AC自动机+DP,外加数位统计。 WZY 神犇出的良心省选题,然而去年我太弱..比现在还要弱得多.. 其实现在做这道题,我自己也没想出完整解法.. 就想出了个 O(l^3) 的做法: 完全按照数位统计的思想来,先统计长度不足 len 的数字的合法种类数,这个枚举开头,然后 AC 自动机 DP 一下,用 f[i][j] 表示到了第...

weixin_30820151的博客 74

[BZOJ3530][SDOI2014]数数 AC自动机+数位DP

考虑先建出集合S的AC自动机,并把它补成Trie图(是叫这个吗?),并在AC自动机标记上S集合中每个数字的结束位置。把这个标记沿fail树下传之后,一个串只要在AC自动机上没有走到标记点,就说明它是幸运数. 所以考虑数位DP,设f[i][j][0/1]f[i][j][0/1]表示从高往低填到第ii位,跑到AC自动机上jj点,前ii位<N<N还是=N=N。转移即可。 考虑到不能有前导零,所以填每一

DOFYPXY的博客 380
上一篇: [BZOJ]2938 [POI2000] 病毒 AC自动机
下一篇: [BZOJ]1030 [JSOI2007] 文本生成器 AC自动机 + DP
MaxMercer
博客等级 码龄10年 55粉丝 261原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值