2018北京ICPC H Approximate Matching AC自动机DP

学习笔记|多样本单因素方差分析|事后比较|方差齐性|F检验|韦尔奇检验|两独立样本T检验|两样本方差分析|规范表达|《小白爱上SPSS》课程:SPSS第七讲 | 单因素方差分析怎么做? 阅读详情

题目链接:http://hihocoder.com/problemset/problem/1877

因为近似匹配最多只能有1个字符不匹配,所以向ac自动机里加入n+1个模式串(还有一个原串)。然后用AC自动机DP,insert之后构建fail边。

如果要让dpij代表前i个字符到达第j个节点并且至少近似匹配一次的话,转移起来会非常麻烦,所以就反过来统计前i个字符到达第j个节点没有近似匹配的字符串的数量,最后用2^m-dp【m】【j】(j为结点数)即为答案。

#include<bits/stdc++.h>

using namespace std;

const int maxn=100+10;///多个模式串长度
const int lettersize=2;///看种类


char s[maxn];
long long dp[50][2000];


const int MAX=2000+10;
struct Trie
{
    int next[MAX][lettersize],fail[MAX],end[MAX];
    int root,L;
    int newnode()
    {
        for (int i=0;i<lettersize;i++)
            next[L][i]=-1;
        end[L++]=0;
        return L-1;
    }
    void init()
    {
        L=0;
        root=newnode();
    }
    void insert(char *buf)
    {
        int len=strlen(buf);
        int now=root;
        for (int i=0;i<len;i++)
        {
            if (next[now][buf[i]-'0']==-1)
                next[now][buf[i]-'0']=newnode();
            now=next[now][buf[i]-'0'];
        }
        end[now]++;
    }
    void build ()
    {
        queue<int >Q;
        fail[root]=root;
        for (int i=0;i<lettersize;i++)
            if (next[root][i]==-1)
                next[root][i]=root;
            else
            {
                fail[next[root][i]]=root;
                Q.push(next[root][i]);
            }
        while (!Q.empty())
        {
            int now=Q.front();
            Q.pop();
            for (int i=0;i<lettersize;i++)
                if (next[now][i]==-1)
                    next[now][i]=next[fail[now]][i];
                else
                {
                    fail[next[now][i]]=next[fail[now]][i];
                    Q.push(next[now][i]);
                }
        }
    }
}ac;

int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        ac.init();
        int n,m;
        scanf("%d%d",&n,&m);

        scanf("%s",s);
        if(n>m)
        {
            printf("0\n");
            continue;
        }
        else if(n==m)
        {
            printf("%d\n",n+1);
            continue;
        }
        ac.insert(s);
        for(int i=0;i<n;i++)
        {
            if(s[i]=='0')
            {
                s[i]='1';
                ac.insert(s);
                s[i]='0';
            }
            else if(s[i]=='1')
            {
                s[i]='0';
                ac.insert(s);
                s[i]='1';
            }
        }
        ac.build();
        for(int i=0;i<ac.L;i++)
            for(int j=0;j<2;j++)
//            printf("next[%d][%d]=%d\n",i,j,ac.next[i][j]);
        for(int i=0;i<=m;i++)
            for(int j=0;j<ac.L;j++)
                dp[i][j]=-1;
        dp[0][0]=1;
        for(int i=1;i<=m;i++)
        {
            for(int j=0;j<ac.L;j++)
            {
                if(dp[i-1][j]==-1|| ac.end[j])
                    continue;
//                printf("dp %d %d=%lld->\n",i-1,j,dp[i-1][j]);
                for(int k=0;k<2;k++)
                {
                    int son=ac.next[j][k];
                    if(ac.end[son])
                        continue;
                    if(dp[i][son]==-1)
                        dp[i][son]=dp[i-1][j];
                    else
                        dp[i][son]+=dp[i-1][j];
//                printf("dp %d %d=%lld\n",i,son,dp[i][son]);
                }
            }
        }
        long long ans=1;
        for(int i=1;i<=m;i++)
            ans*=2;
        for(int j=1;j<ac.L;j++)
        {
//            printf("dp[%d][%d]=%lld\n",m,j,dp[m][j]);
            if(dp[m][j]>0)
            ans-=dp[m][j];
        }
        printf("%lld\n",ans);
    }
    return 0;
}

 

C++结合大漠插件实现DNF自动化脚本:从原理到实战 自动化技术通过模拟用户操作,实现重复性任务的自动执行,其核心原理在于对系统输入输出接口的精确控制。在Windows平台,这通常涉及窗口管理、图像识别与键鼠模拟等技术。这些技术为软件自动化测试、办公流程自动化及特定场景的辅助工具开发提供了工程实践基础。大漠插件作为国内广泛使用的Windows自动化开发组件,封装了上述底层操作,显著降低了开发门槛。通过其提供的COM接口,开发者可以高效实现窗口绑定、后台找图找色及内存读写等关键功能。本文以《地下城与勇士》为例,详细解析如何利用C++集成大漠插件,构建一个稳定、高 阅读详情

相关推荐

神经算子:突破科学计算瓶颈的函数空间映射技术

神经算子(Neural Operators)是深度学习在科学计算领域的重要突破,它从根本上改变了处理连续物理问题的方式。与传统神经网络学习离散数据点映射不同,神经算子学习的是函数空间到函数空间的映射,这种范式转换使其具备离散化收敛性和超分辨率预测能力。在计算流体力学、天气预报等需要求解偏微分方程的场景中,神经算子能够在保持精度的同时将计算速度提升数个数量级。傅里叶神经算子(FNO)通过快速傅里叶变换实现高效计算,特别适合规则网格问题;而图神经算子(GNO)则擅长处理不规则网格和复杂几何形状。这种技术为参数敏

cuililai5127的博客 442

2018北京icpc区域赛 H - Approximate Matching AC自动机

H - Approximate Matching 题意:有一个长度为n的01母串,求有多少个长度为m的01串T,使得母串是该串近似的子串。a是b的近似子串:那么b存在一个连续子串c,a与c至多只有一个字符不同 解法:我们先把母串和所有与其只有一个字符不同的01串插入字典树,建立AC自动机,预处理从每个节点出发,有d[u]d[u]d[u]条长度为n的路径刚好走完才走到叶子节点,然后我们枚举母串与...

ccsu_cat 648

Rocky Linux 9 离线环境Docker部署全攻略:从依赖打包到服务启动

本文详细介绍了在Rocky Linux 9纯离线环境中部署Docker的完整流程。从在联网环境精准下载Docker静态二进制包及所有系统依赖RPM包,到在隔离服务器上按顺序安装依赖、部署二进制文件、配置systemd服务并进行权限与网络调优,提供了从零到一的可复现实战指南。文章重点解决了离线部署的核心难题,并分享了搭建私有镜像仓库等进阶技巧,是运维人员在严格网络管控环境下部署容器服务的必备参考。

pytorchlight8的博客 138

2018ICPC北京区域 Approximate Matching(AC自动机+DP)

String matching, a common problem in DNA sequence analysis and text editing, is to find the occurrences of one certain string (called pattern) in a larger string (called text). In some cases, the patte...

Cymbals的博客 628

開機自動進入UEFI Interactive Shell無法正常開機怎麼辦?

BIOS/UEFI,啟動後進入UEFI Interactive Shell大多數人都告訴你沒有安裝系統去裝系統吧,但你明明昨天還在運行系統?今天就這樣?有沒有解決辦法?

sheaahhoi1的博客 7740

Spring Boot 构建war 部署到tomcat下无法在Nacos中注册服务

因此,当使用外部容器时,如此处的 Tomcat 来部署项目,AbstractAutoServiceRegistration 就不能监听到容器启动事件了,也就不会尝试向服务注册中心注册当前这个微服务,那么注册就失败了,并且也就没有异常信息了。自定义获取获取外部容器端口的方法, 然后监听应用启动事件,当应用被启动时,获取外部容器启动的端口号,然后将这个 port 设置到 NacosAutoServiceReigistration 中。在启动类同级目录,复制下面代码即可(不需要修改,直接构建war即可)

ttyy1112的专栏 2519

2018北京ICPC H. Approximate Matching(AC自动机+DP)

  H : Approximate Matching 时间限制:1000ms,单点时限:1000ms,内存限制:512MB 描述 String matching, a common problem in DNA sequence analysis and text editing, is to find the occurrences of one certain string (calle...

加载中... 846

YOLOv8 TensorRT C++部署实战详解:从XMake构建到推理流水线

本项目实现了一个基于YOLOv8和TensorRT的高性能火灾烟雾检测系统,具有以下核心特点: 技术架构:采用TensorRT 8.6+进行GPU加速推理,结合CUDA 12.1和OpenCV 4.8+,实现高效计算机视觉处理。系统使用XMake替代CMake构建,配置更简洁高效。

hscing的博客 1065

2018 icpc Beijing Regional H 【dp+ac自动机】

题目大意 给定一个串,长度为m, 询问存在多少长度为n的串,使得与长度m的串对应位置匹配最多只有一个字符不相同的方案数 题目分析 如果我们考虑串进行匹配的化,很难去重 因此我们反过来考虑 考虑匹配不上的情况 那么要匹配的串只有m+1个,所以我们只要考虑当前串的一个后缀是否是m+1个串的前缀即可。 然后通过后缀进行转移 f[i][j] 表示 前i项的后缀为状态j的时候的方案数 那么对于第i+1项,...

beckyUp的博客 338

基于FISCO BCOS 部署可升级的 Solidity存证智能合约

本文介绍了基于FISCOBCOS平台的可升级Solidity存证智能合约实现方案。采用透明代理模式,包含逻辑合约、代理合约和管理合约三部分,支持业务逻辑升级而不影响存储数据。详细阐述了合约架构设计、Solidity代码实现、Go SDK交互流程以及完整的部署升级步骤。方案具有数据持久性、版本兼容性和生产就绪等特点,提供了权限控制、输入验证等安全机制,并包含监控管理工具。该实现为企业级区块链存证应用提供了可靠的基础架构,支持后续功能扩展和定制化开发。

分享AI、区块链技术及应用,未来已来 1513

嵌入式工程师必学(118):MCU的硬件定时器和中断

大多数微处理器都有一个或多个可编程硬件定时器,这些定时器包括对中断的支持。可以有不同类型的计时器,用于不同的应用程序。例如,LPC1768 具有四个 32 位通用定时器、一个看门狗定时器、一个重复中断定时器、一个系统滴答定时器、一个正交编码器接口、6 个 PWM 输出和一个支持中断的实时时钟。硬件定时器用于计时和计数作,允许处理器在 timer 进程运行时继续执行其他进程。硬件定时器是一种使用 clock 信号来增加 register 的电路。

码农17年的博客 211

Approximate Matching HihoCoder - 1877 ac自动机优化DP 套路

点我看题 题意: 给出n,m 给出一个长度为n的01串 S, 问你能构造出多少个01串, 这些01串的某一个字串与S至多只有一个位置不同。 题解: 首先想到dp[i][j][0/1] 表示 构造了前i个字符,与S的前j个字符 有0/1 字符不相同的方案数。 显然 ,无法很方便的转移,因为只要有一个字串满足条件就行了。 然后,有一个ac自动机很套路的用法. 这题跟hdu2858有些类似。 点我看题 ...

lifelike 838

linux v3h平台开发系列详解(GMSL摄像头篇):1.12 解串器MAX96712输出4 lane 变 2 lane的配置

本文详细介绍了在Linux v3h平台上,针对Max96712解串器进行MIPI 4lane到2lane配置。内容包括串行器解串器介绍、链路框架、硬件连接、以及软件寄存器如何配值和一些问题的解决方法。

xian18809311584的博客 1092

2018北京icpc区域赛 H - Approximate Matching(AC自动机+DP)

String matching, a common problem in DNA sequence analysis and text editing, is to find the occurrences of one certain string (called pattern) in a larger string (called text). In some cases, the patte...

qq_43544481的博客 371

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

老版QQ原生表情gif动态

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

HihoCoder 1877 - Approximate Matching

题目链接:http://hihocoder.com/problemset/problem/1877 题意:   给定一个字符串,问有多少长度为 m 的字符串弱包含这个字符串。弱包含被定义为包含这个字符串或者包含这个字符串任意更改一位之后的字符串。 题解:   基本的 AC 自动机上 dp,先将所有可能匹配的串放到一个自动机里,每个节点的 dp[i] 表示匹配到当前节点...

aycg65134的博客 301

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

2018.9.29 icpc15北京区域赛重现

A:Xiongnu's Land  (树状数组的差分数组) 题意:矩形沙漠(0,0)到(R,R),有n片绿洲,每个绿洲也是矩形,且不重叠。求一个整数分割线分割x,使得 1.左面与右面的绿洲面积尽量接近 2.若不能相等,就让左面的绿洲面积尽量的大 3.在绿洲面积差优先约束下,分割线尽量靠右 思路: 需要把面积是按x轴分割,所以要把面积落下来,落到x轴上,比如某绿洲的x范围是【L,R】,高...

AAAAAAAC的博客 461

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

hihoCoder1877 Approximate Matching - AC自动机 - 动态规划(dp)

Approximate Matching 时间限制:1000ms 单点时限:1000ms 内存限制:512MB 描述 String matching, a common problem in DNA sequence analysis and text editing, is to find the occurrences of one certain string (called pattern)...

太阳升起 542

AC自动机经典题目

如果对AC自动机的概念,比如Trie图,fail树,last树仍有理解上的困难,请参见:AC自动机 一. 多模式匹配 多模式匹配是ac自动机最经典的问题,包括两个优化:构建last树和树上DP,在上面给出的链接中介绍的很详细了,不再赘述。 习题: HDU 2896 HDU 3065 二. AC自动机上DP 常用于给定某些模式串,问类似于以下的问题: 是否存在一个无限长的文本串不包含每个模式串。...

秋叶红于二月花 1089

hihocoder1877 Approximate Matching(AC自动机上dp)

题意: 称模式串P和文本串S近似匹配,当且仅当文本串S存在一个子串S1,满足: S1和P长度相同,同时最多有一个字符不同。 给定长度为n的模式串P,问有多少个长度为m的文本串S与P近似匹配。 数据范围:n,m<=40,所有串都只由0和1组成。 ...

zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz 352

2018ICPC北京赛总结

地点:北京大学 时间:2018年11月11日 结果:铜牌 北京赛总体还是比较欢快的,飞机晚点了,到北京已经星期六凌晨了,去酒店洗洗就睡了。第一天热身赛没太大意思,做了一道题睡觉了,醒来之后发现队友已经分别做了一题排70左右,我们就提前离场了(题目是去年北京赛的题)。第二天我们总共做了3题,其中有两道是数学规律题,最后一道题目是在比赛结束两分钟之前a的,当时觉得很惊险,后来才知道不a那题也可以...

aaakirito的博客 546

2018 ICPC北京 H ac自动机

n=40的01串,求有多少m=40的01串中包含它,包含的定义是存在子串有至多一个字符不相同 600组n=15的数据 15组n=40的数据,所以我们只能支持n^5的算法。 陷入两个比较有意思的坑: 1 如果手动构建fail树,建立两个并行的串,左串代表当前未使用那一个可以不相同的字符的名额,右串代表已经使用了这个名额,那么按照bfs m步的想法,左串可以通过“使用名额”到达右串,也可以通过“...

weixin_33881140的博客 215

ACM-ICPC 2018 北京赛区网络预赛(A B C D H)

ACM-ICPC 2018 北京赛区网络预赛(待更新) A. Saving Tang Monk II #####题目链接 题面: 划掉 题意: 大搜索,队友写的 思路: 大搜索,队友写的 AC代码: #include &amp;amp;amp;amp;lt;cmath&amp;amp;amp;amp;gt; #include &amp;amp;amp;amp;lt;cstdio&amp;amp;amp;amp;gt; #include &amp;amp;amp;am

LFhase‘s Blog 1209

2018 ACM-ICPC Asia Beijing Regional Contest题解

以下所有AC题解程序来自“仙客传奇”团队。 A. Jin Yong’s Wukong Ranking List AC的C++语言程序: #include <iostream> #include <cstring> #include <vector> #include <map> #include <string> #include &l...

海岛Blog 1002

ACM常用模板——ac自动机

大三了,在网络赛结束那刻决定放弃搞算法了,做了一个的安卓,却被告知暑假参加的ACM网络赛北京赛区成功进入现场赛,意外又惊喜,感觉付出都不是白费的,然后又滚回去刷题了,整理了一些模板,跟你们分享:ac自动机模型:我们给出5个单词,say,she,shr,he,her。给定字符串为yasherhs。问多少个单词在字符串中出现过。 模板://====================== // HDU 2

kukajenny的博客 1143

AC自动机 + 概率dp + 高斯消元 --- HDU 5955 or 2016年沈阳icpc H [AC自动机 + 概率dp + 高斯消元]详解

题目链接 题目大意: 就是有NNN个人,每个人都会猜一个长度为LLL的只包含{1,2,3,4,5,6}\{1,2,3,4,5,6\}{1,2,3,4,5,6}的序列,现在裁判开始投掷骰子,并且把每次的结果记录下来形成一个字符串字符串字符串,如果这个字符串字符串字符串中出现了NNN个人中其中一人的字符串字符串字符串,那么那个人就会获得胜利,问你每个人获得胜利的概率是多大? 解题思路: 1.首先我们知道给定一个若干个模式串,再给定一个文本串去查询出现过的模式串,这不就是典型的AC自动机? 2.那么问题就转化

weixin_45630722的博客 252

ZOJ 4027 2018浙江省赛D Sequence Swapping(DP)

题目链接:zoj 4027一直在准备考试以及麻痹自己的学习,所以完美的避开了整个四月,唉输入s之后给将左右括号分别存放在c,d两个数组中,并给每个左右括号编号,dp【i】【j】代表将第i个左括号放到第j个右括号之后得到的分数(此时序号比 i 大的所有左括号都已经放置完毕,并且dp【i】【j】包含了这些值)maxx=max(dp【k】);(k&gt;=j)dp[i][j]=(d[j]-d[i])*c...

大乐的博客 830
上一篇: hdu 5514 Frogs 思维+容斥
下一篇: Greater New York Region 2015 G compositions dp
Dale_zero
博客等级 码龄9年 10粉丝 174原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值