题目链接:点击查看

题目大意:给出一个长度为 n 的 01 字符串,规定近似相等的定义是,两个长度相同的字符串,至多只有一个位置不相同,问长度为 m 的 01 串中,有多少个字符串,存在一个长度为 n 的子串,使得其与给定的字符串近似相等

题目分析:首先可以与给定的长度为 n 的字符串进行近似相等的字符串至多有 n + 1 个,分别是其本身,以及每个位置置反后得到的新的字符串,那么这个题目正难则反,我们可以用 AC自动机 配合 dp 求出长度为 m 的字符串有多少种不能和给定的字符串近似相等,那么最终答案就是  了

代码:

//#pragma GCC optimize(2)
//#pragma GCC optimize("Ofast","inline","-ffast-math")
//#pragma GCC target("avx,sse2,sse3,sse4,mmx")
#include<iostream>
#include<cstdio>
#include<string>
#include<ctime>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<stack>
#include<climits>
#include<queue>
#include<map>
#include<set>
#include<sstream>
#include<cassert>
#include<bitset>
#include<unordered_map>
using namespace std;typedef long long LL;typedef unsigned long long ull;const int inf=0x3f3f3f3f;const int N=2e3+100;char s[N];int fail[N],trie[N][2],cnt;bool vis[N];LL dp[50][N];void insert_word()
{int len=strlen(s);int pos=0;for(int i=0;i<len;i++){int to=s[i]-'0';if(!trie[pos][to])trie[pos][to]=++cnt;pos=trie[pos][to];}vis[pos]=true;
}void getfail()
{queue<int>q;for(int i=0;i<2;i++){if(trie[0][i]){fail[trie[0][i]]=0;q.push(trie[0][i]);}}while(!q.empty()){int cur=q.front();q.pop();for(int i=0;i<2;i++){if(trie[cur][i]){fail[trie[cur][i]]=trie[fail[cur]][i];q.push(trie[cur][i]);}elsetrie[cur][i]=trie[fail[cur]][i];}}
}void init()
{cnt=0;memset(trie,0,sizeof(trie));memset(vis,false,sizeof(vis));memset(dp,0,sizeof(dp));
}int main()
{
#ifndef ONLINE_JUDGE
//  freopen("data.in.txt","r",stdin);
//  freopen("data.out.txt","w",stdout);
#endif
//  ios::sync_with_stdio(false);int w;cin>>w;while(w--){init();int n,m;scanf("%d%d",&n,&m);scanf("%s",s);insert_word();for(int i=0;i<n;i++){if(s[i]=='0')s[i]='1';elses[i]='0';insert_word();if(s[i]=='0')s[i]='1';elses[i]='0';}getfail();dp[0][0]=1;for(int i=0;i<m;i++)for(int j=0;j<=cnt;j++){if(!dp[i][j])continue;for(int k=0;k<2;k++){if(vis[trie[j][k]])continue;dp[i+1][trie[j][k]]+=dp[i][j];}}LL ans=0;for(int i=0;i<=cnt;i++)ans+=dp[m][i];printf("%lld\n",(1LL<<m)-ans);}return 0;
}

HihoCoder - 1877 Approximate Matching(AC自动机+dp)相关推荐

  1. uvalive4842(AC自动机+DP)

    题意: 给出猴子打字时打某个字母的概率,猴子最多可以敲键盘m次,问得到的长度是m的单词包含模式串的概率. 思路: AC自动机+dp. 首先,我们用模式串构造一个AC自动机,用dp[i]][j]表示当前 ...

  2. HDU 2296 Ring AC自动机 + DP

    题意:给你n个模式串,每个模式串有一个得分,让你构造出一个长度为N之内且分数最高的文本串;输出字典序列最小的. 解题思路:  AC自动机 + DP , 不过要输出字典序列最小,多开一个 一个三维字符串 ...

  3. bzoj 1030: [JSOI2007]文本生成器(AC自动机+DP)

    1030: [JSOI2007]文本生成器 Time Limit: 1 Sec  Memory Limit: 162 MB Submit: 5187  Solved: 2136 [Submit][St ...

  4. 【BZOJ】4861: [Beijing2017]魔法咒语 AC自动机+DP+矩阵快速幂

    [题意]给定n个原串和m个禁忌串,要求用原串集合能拼出的不含禁忌串且长度为L的串的数量.(60%)n,m<=50,L<=100.(40%)原串长度为1或2,L<=10^18. [算法 ...

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

    H : Approximate Matching 时间限制:1000ms,单点时限:1000ms,内存限制:512MB 描述 String matching, a common problem in ...

  6. POJ 3691 DNA repair AC自动机 + DP

    题意:给你只包含'A','G','T','C'四个字母的n个模板串和1个文本串,问你文本串改变多少个字符就可以使得文本串中没有一个模板串 解题思路: 我们可以知道  dp[i][j] 为文本串到 第i ...

  7. 【HDU 4511】小明系列故事——女友的考验(AC自动机+DP)

    Problem Description 终于放寒假了,小明要和女朋友一起去看电影.这天,女朋友想给小明一个考验,在小明正准备出发的时候,女朋友告诉他,她在电影院等他,小明过来的路线必须满足给定的规则: ...

  8. CDOJ1633 Video Game Combos [AC自动机+dp]

    题目地址:http://acm.uestc.edu.cn/problem.php?pid=1633 AC自动机+BFS AC自动机,参见:http://www.cnblogs.com/luna-lov ...

  9. [BZOJ1030]:[JSOI2007]文本生成器(AC自动机+DP)

    题目传送门 题目描述: JSOI交给队员ZYX一个任务,编制一个称之为"文本生成器"的电脑软件:该软件的使用者是一些低幼人群, 他们现在使用的是GW文本生成器v6版.该软件可以随机 ...

最新文章

  1. 妙用Java 8中的 Function接口 消灭if...else(非常新颖的写法)
  2. mysql同步 触发器_mysql 触发器(数据库的同步)
  3. C#中的深复制和浅复制(在C#中克隆对象)
  4. udp计算机dll,Udp_SocketBll.dll
  5. redis专题:redis的主从、哨兵、集群架构的配置和部署详情、以及问题分析
  6. java中字节码_Java字节码执行图示
  7. 软件测试核心之用例设计
  8. mysql 主从复制 博客园_mysql主从复制
  9. activiti表单设计器_基于Vue,ElementUI开发的一款表单设计器
  10. allt什么意思_Allt是什么意思
  11. freemarker数据格式化问题(即数值超过三位后自动添加逗号问题)
  12. 【Java 8 in Action】Stream
  13. android 罗盘陀螺仪,电子罗盘有什么用,安卓智能手机的感应器的问题! 电子罗盘与陀螺仪有......
  14. Vue模板挂载到页面源码简要解析
  15. python打开网页后点击网页按钮_单击网页按钮的Python脚本
  16. 如何评价腾讯云游戏平台 START ?
  17. 重力传感事件应用之一 手机摇一摇(摇一次得一分)
  18. linux 加速度传感器数据获取,对加速度传感器的数据进行方向和坐标的转换
  19. Mac移动硬盘不正确断开连接导致无法读取加载的解决方法
  20. 【Java编程练习】司机肇事后逃跑,现场三人半瞎系列

热门文章

  1. 牛津大学计算机科学研究生几年,2020年牛津大学硕士一般几年毕业
  2. 状态码202_HTTP状态码大全
  3. resultType 和resultMap 的区别?
  4. 执行SQL-MapperProxy.invoke()
  5. JdbcTemplate和NamedParameterJdbcTemplate
  6. 高仿真的类-自动注入
  7. Maven软件的下载安装
  8. 线程池状态和使用注意点
  9. 常用的函数式接口_Predicate接口
  10. 默认标准错误文件linux,Linux中标准输出和标准错误的重导向