[bzoj3530][SDOI2014]数数

MOOS-ivp实战:从零搭建水下机器人通信系统(Ubuntu 22.04版) 本文详细介绍了在Ubuntu 22.04系统上从零开始搭建MOOS-ivp水下机器人通信系统的完整实战流程。内容涵盖环境准备、核心安装、MOOSDB通信模型解析、自定义应用节点开发、以及调试监控工具链的使用,旨在帮助开发者快速掌握这一分布式机器人系统框架,构建稳定可靠的水下机器人通信与控制系统。 阅读详情

题目描述

求不大于N的所有正整数中有多少个满足以下条件的数:给定字符串集合S,把该数当作字符串(没有前导0),集合S中没有任意一个字符串是该字符串的子集。
N的长度不超过1200,集合中所有字符串长度和不超过1500。

AC自动机上的DP

将集合内所有字符串建出一颗AC自动机。
那么,我们需要预处理一个这样的next[i,j]表示在结点i上接下要走j的话会调整到的结点是什么。(即预处理所有可能出现的调整结果)。
接下来就是数位DP了,设f[i,j,0]表示在第i位在AC自动机的结点j,当前比前i位比N小,那么f[i,j,1]就是与N相同,转移显然。
跳过所有状态满足当前结点可以匹配到一个单词(即S内的一个字符串),这样的结点j满足bz[j]=1(它是单词结点)或last[j]>0(它可以通过fail指针调整而匹配成功)。

参考程序

#include<cstdio>
#include<algorithm>
#include<cstring>
#include<deque>
#define fo(i,a,b) for(i=a;i<=b;i++)
using namespace std;
typedef long long ll;
const ll mo=1000000007;
struct dong{
    ll x,y;
};
deque<dong> dl;
ll next[1500+10][15],g[1500+10][15],fail[1500+10],last[1500+10];
bool bz[1500+10];
ll f[1200+10][1500+10][2];
ll i,j,k,l,t,n,m,top,tot,ans;
char s[1500+10],h[1500+10],ch;
dong zlt;
void insert(ll x,ll y){
    if (y>top){
        bz[x]=1;
        return;
    }
    if (g[x][h[y]-'0']==-1){
        g[x][h[y]-'0']=++tot;
        ll i;
        fo(i,0,9) g[tot][i]=-1;
    }
    insert(g[x][h[y]-'0'],y+1);
}
void bfs(){
    fo(i,0,9)
        if (g[0][i]!=-1){
            zlt.x=g[0][i];zlt.y=0;
            dl.push_back(zlt);
        }
    while (!dl.empty()){
        zlt=dl.front();
        dl.pop_front();
        k=zlt.x;l=zlt.y;
        fail[k]=l;
        if (bz[l]) last[k]=l;else last[k]=last[l];
        fo(i,0,9){
            if (g[k][i]==-1) continue;
            j=l;
            while (j&&g[j][i]==-1) j=fail[j];
            if (g[j][i]!=-1) j=g[j][i];
            zlt.x=g[k][i];zlt.y=j;
            dl.push_back(zlt);
        }
    }
}
void getnext(){
    fo(i,0,tot){
        fo(k,0,9){
            j=i;
            while (j&&g[j][k]==-1) j=fail[j];
            if (g[j][k]!=-1) j=g[j][k];
            next[i][k]=j;
        }
    }
}
int main(){
    //freopen("count.in","r",stdin);freopen("count.out","w",stdout);
    do{
        ch=getchar();
        if (ch=='\n') break;
        s[++n]=ch;
    }while (1);
    scanf("%lld",&m);
    ch=getchar();
    fo(i,0,9) g[0][i]=-1;
    fo(i,1,m){
        top=0;
        do{
            ch=getchar();
            if (ch=='\n') break;
            h[++top]=ch;
        }while (1);
        insert(0,1);
    }
    bfs();
    getnext();
    fo(i,1,s[1]-'0'-1) f[1][next[0][i]][0]=(f[1][next[0][i]][0]+1)%mo;
    f[1][next[0][s[1]-'0']][1]=(f[1][next[0][s[1]-'0']][1]+1)%mo;
    fo(i,1,n-1){
        fo(j,1,9) f[i+1][next[0][j]][0]=(f[i+1][next[0][j]][0]+1)%mo;
        fo(j,0,tot){
            if (bz[j]||last[j]) continue;
            if (f[i][j][0])
                fo(k,0,9) f[i+1][next[j][k]][0]=(f[i+1][next[j][k]][0]+f[i][j][0])%mo;
            if (f[i][j][1]){
                fo(k,0,s[i+1]-'0'-1) f[i+1][next[j][k]][0]=(f[i+1][next[j][k]][0]+f[i][j][1])%mo;
                f[i+1][next[j][s[i+1]-'0']][1]=(f[i+1][next[j][s[i+1]-'0']][1]+f[i][j][1])%mo;
            }
        }
    }
    ans=0;
    fo(i,0,tot)
        if (!bz[i]&&!last[i]) ans=(ans+f[n][i][0]+f[n][i][1])%mo;
    printf("%lld\n",ans);
}
手把手教你学simulink(90.1)--直流电动机实例:基于Simulink的基本模型的直流电动机(DC Motor)建模 直流电动机(DC Motor)因其结构简单、控制方便和良好的调速性能,广泛应用于各种工业自动化、机器人技术、家用电器以及航空航天等领域。为了更好地理解和应用直流电动机的工作原理及其控制系统,本项目旨在通过Simulink对直流电动机进行基本模型的建模与仿真。 阅读详情

相关推荐

企业微信-审批控件中的外部选项的应用全流程完美解决方案

完美解决企业微信所有JS-SDK调用问题 完美解决苹果和PC端不适配的问题

qq_45195039的博客 5871

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

3530: [Sdoi2014]数数 Time Limit: 10 Sec  Memory Limit: 512 MB Submit: 1226  Solved: 618 [Submit][Status][Discuss] Description 我们称一个正整数N是幸运数,当且仅当它的十进制表示中不包含数字串集合S中任意一个元素作为其子串。例如当S=(22,333,0233)时,2

Le Petit Prince 487

从ISO 17987到SAE J2602:LIN一致性测试标准全景解读与CANoe实现

本文深入解析了从ISO 17987到SAE J2602的LIN一致性测试标准技术演进,详细对比了两大标准体系的技术差异,并基于Vector CANoe平台演示了如何构建符合最新行业要求的自动化测试方案。文章重点介绍了SAE J2602标准的三大改进点,包括唤醒特性、传输层协议和诊断服务的增强测试要求,并提供了CANoe测试环境配置、测试模块集成及测试案例解析的实战指南。

app77的博客 336

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

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

shiyukun1998的专栏 1175

MACS2软件进行Peak calling

MACS2可以检出ChIP-Seq,ATAC-seq 以及 MeRIP-seq (RNA甲基化测序) 等富集的序列。peaks calling 有不同的方法,MACS2是最常用的call peaks工具。 MACS全称Model-based Analysis of ChIP-Seq,最初的设计是用来鉴定转录因子的结合位点,但是它也可以用于其他类型的富集方式测序。usage: macs2 [-h] [--version] {callpeak,bdgpeakcall,bdgbroadca

qq_27390023的博客 3790

从零开始:如何利用Device Monitoring Studio构建高效数据监控系统

本文详细介绍了如何利用HHD Device Monitoring Studio从零开始构建高效数据监控系统。涵盖基础架构设计、核心功能解析、实战部署指南及高级数据分析技术,帮助用户实现非侵入式监控,提升设备调试和网络协议分析效率。特别适合物联网和工业自动化领域的开发者与运维人员。

weixin_29201859的博客 329

bzoj3530【SDOI2014】数数

AC自动机+动态规划

AaronPolaris 2881

智能体在车联网中的应用:一份详尽到每日的100天学习路线图

这100天的旅程,是一次对毅力、学习方法和工程实践能力的综合考验。它不仅关乎掌握一系列技术点,更关乎培养解决复杂系统性问题的思维模式——将宏观的交通需求分解为微观的智能体决策,再通过多智能体协同涌现出宏观的智能行为。当你完成这份大纲时,你将拥有的不仅是一个项目作品集,更是一套应对“智能体+车联网”乃至更广泛AI+垂直领域挑战的方法论。未来已来,期待你成为构建智能交通新生态的关键贡献者。

IT深耕十余载,大道之简 1334

【BZOJ 3530】 [Sdoi2014]数数

AC自动机上的dp~

Regina8023 1949

YOLOv11改进 | Conv篇 | AKConv轻量级架构下的高效检测(附代码 + 修改方法 + 二次创新)

本文给大家带来的改进内容是AKConv是一种创新的变核卷积,它旨在解决标准卷积操作中的固有缺陷(采样形状是固定的),AKConv的核心思想在于它为卷积核提供了任意数量的参数和任意采样形状,能够使用任意数量的参数(如1, 2, 3, 4, 5, 6, 7等)来提取特征,这在标准卷积和可变形卷积中并未实现​​。AKConv能够根据硬件环境,使卷积参数的数量呈线性增减非常适用于轻量化模型的读者)。

Snu77的博客 1万+

微信小程序 - 最新详细实现气泡菜单功能,点击任意元素在底部或附近周围弹出气泡菜单列表,仿微信气泡弹框显示菜单快捷功能收纳,自定义气泡弹窗/菜单气泡弹窗,小程序气泡框嵌套菜单组件插件,自动计算弹出定位

微信小程序,vue2,vue3,气泡列表,汽泡菜单,气泡框,泡泡框,悬浮框,悬浮菜单,点击菜单按钮弹出气泡,对话箭头气泡框,弹出的气泡准确定位并吸附在附近,弹出式气泡,弹窗菜单,气泡自定义HTML弹窗,带三角的气泡弹框,三角气泡框里面嵌套菜单,当点击一个按钮或元素时,会从附近弹出一个小气泡一样的菜单列表,自定义气泡框内的内容,点击一个元素在附近弹出一个气泡弹框功能效果,气泡弹框不准怎么办,被盖住了,挡住了,长按弹出,组件插件,微信,自定义气泡菜单组件,气泡弹出框,小程序自定义气泡框,菜单气泡,包裹列表的三角

🏆 前端领域优质创作者 3918

bzoj3530: [Sdoi2014]数数

AC自动机上的数位dp

ACoder 578

小孙学变频学习笔记(二)变频器的逆变电路

本文主要介绍了变频器中逆变电路的核心器件IGBT及其应用。IGBT是一种电压控制型三端半导体开关器件,具有开关频率高、功耗低的优点,在变频器中仅使用截止和饱和导通状态。文章详细分析了IGBT的结构特性、与晶闸管的区别,以及由四个IGBT组成的直流转交流逆变电路原理。重点阐述了IGBT并联反向二极管的作用:提供电流反向通路、避免反向电压损坏器件、提高开关效率等。最后提供了相关学习参考网址供读者进一步研究。

qq_43091070的博客 1196

bzoj 3530 [Sdoi2014]数数

AC自动机+数位dp

我要吃熊猫 274

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

老版QQ原生表情gif动态

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

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

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

[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自动机+动态规划

Orion_Rigel 714

【BZOJ 3530】【SDOI 2014】数数

http://www.lydsy.com/JudgeOnline/problem.php?id=3530 上午gty的测试题,爆0了qwq 类似文本生成器那道题,把AC自动机的转移建出来,准确地说建出了一个Trie图,然后在上面dp就可以了。 这道题因为有小于等于n的限制,所以要用类似数位dp的方法,记录卡不卡上界两个状态来转移。 #include<cstdio> #incl...

as2886089的博客 100

Bzoj3530 [Sdoi2014]数数

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

dezhen7015的博客 104

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

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

aodanchui1057的博客 135

BZOJ3530 [SDOI2014]数数

AC自动机+DP 记 f[i][j][k] 表示当前已经确定到第 i 位数,走到 AC 自动机上的节点 j,且状态为 k 的总方案数。

Log_x's Blog 730

bzoj3530 [SDOI2014]数数

题目链接 solution 容易想到将集合中的所有串建出AC自动机。然后用\(f[i][j][0/1]\)表示前\(i\)个位置是(1)否(0)为上界,第\(i\)个位置对应AC自动机中的\(j\)号点的方案数。 转移就枚举当前位置填的数字转移即可。 有两个需要注意的地方: 如果某个位置可以通过fail指针跳到一个子串的结束节点,那么这个节点也应该被标记为结束节点。 需要排除前导零的情况。可以...

wxyww2049的博客 43

【BZOJ】【3530】【SDOI2014】数数

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

weixin_30747253的博客 151

【BZOJ3530】【SDOI2014】数数

【题目链接】点击打开链接【思路要点】对模式串建立AC自动机,在上面数位DP即可。注意模式串可能包含前导零。时间复杂度\(O(N*L)\)。【代码】#include&lt;bits/stdc++.h&gt; using namespace std; const int MAXN = 2005; const int P = 1e9 + 7; template &lt;typename T&gt; vo...

cz_xuyixuan的博客 287

[Luogu P3311] [BZOJ 3530] [SDOI2014]数数

洛谷传送门 BZOJ传送门 题目描述 我们称一个正整数NNN是幸运数,当且仅当它的十进制表示中不包含数字串集合SSS中任意一个元素作为其子串。例如当S=(22,333,0233)S=(22,333,0233)S=(22,333,0233)时,233233233是幸运数,233323332333、202332023320233、322332233223不是幸运数。 给定NNN和SSS,计算不大于NN...

LPA的博客 276

BZOJ3530 SDOI2014 数数

传送门 题目大意 给定一个长度为$l$的数$n(l\leq 1200)$,给定$m$个可能包含前导$0$的数字串$m\leq 100$,求有多少个不超过$n$的的数在去前导零后不包含任何一个子串数字串。 题解 很裸的$AC$自动机$+$数位$Dp$题。 对于$m$个数字串建$AC$自动机,$ F_{i,j,k=\{0,1\}}$表示前$i$位匹配到$AC$自动机上的第$j$个节点,...

weixin_30607029的博客 130
上一篇: [bzoj3992][SDOI2015]序列统计
下一篇: 梦醒
WerKeyTom_FTD
博客等级 码龄11年 357粉丝 831原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值