1966: [Ahoi2005]VIRUS 病毒检测

Time Limit: 3 Sec  Memory Limit: 64 MB
Submit: 360  Solved: 143
[Submit][Status][Discuss]

Description

科学家们在Samuel星球上的探险仍在继续。非常幸运的,在Samuel星球的南极附近,探险机器人发现了一个巨大的冰湖!机器人在这个冰湖中搜集到了许多RNA片段运回了实验基地。科学家们经过几个昼夜的研究,发现这些RNA片段中有许多是未知的病毒!每个RNA片段都是由A、C、T、G组成的序列。科学家们也总结出了Samuel星球上的“病毒模版片段”。一个模版片段是由A、C、T、G的序列加上通配符 * 和 ? 来表示。其中 * 的意思是可以匹配上0个或任意多个字符,而 ? 的意思是匹配上任意一个字母。如果一个RNA片段能够和“病毒模版片段”相匹配,那么这个RNA片段就是未知的病毒。例如,假设“病毒模版片段”为A*G?C。RNA片段:AGTC,AGTGTC都是未知的病毒,而RNA片段AGTGC则不是病毒。由于,机器人搜集的这些RNA片段中除去病毒的其他部分都具有非常高的研究价值。所以科学家们希望能够分辨出其中哪些RNA片段不是病毒,并将不是病毒的RNA片段运回宇宙空间站继续进行研究。科学家将这项任务交给了小联。现在请你为小联编写程序统计哪些RNA片段不是病毒。

Input

第一行有一个字符串,由A、C、T、G、*、? 组成。表示“病毒模版片段”。“病毒模版片段”的长度不超过1000。第二行有一个整数N(0<N<500),表示机器人搜集到的RNA片段的数目。随后的N行,每一行有一个字符串,由A、C、T、G组成,表示一个RNA片段。每个RNA片段的长度不超过500。注意:“病毒模版片段”和RNA片段的长度都至少为1。

Output

只有一行输出,为整数M,即不是病毒的RNA片段的数目。

Sample Input

A*G?C
3
AGTC
AGTGTC
AGTGC

Sample Output

1

HINT

输入中的RNA片段AGTGC不是病毒。

Source

[Submit][Status][Discuss]



瞎逼dp下

f[i][j]:主串匹配到第i位,当前串匹配到第j位,是否可行

转移随意脑补,,,,(WA了好多次是什么鬼?!)


听说AC自动机也可以呀

话说,,,我这种傻逼写法要特判最后一位是否为'*'

#include<iostream>
#include<cstdio>
#include<queue>
#include<vector>
#include<bitset>
#include<algorithm>
#include<cstring>
#include<map>
#include<stack>
#include<set>
#include<cmath>
#include<ext/pb_ds/priority_queue.hpp>
using namespace std;const int maxn = 1010;
const int maxm = 505;int n,m,cnt,len,ans,f[maxn][maxm];
char a[maxn],b[maxm];
bool not_cho[maxn];int main()
{#ifdef DMCfreopen("virus8.in","r",stdin);#endifscanf("%s",a + 1); int tot = strlen(a + 1);for (int i = 2; i <= tot; i++)if (a[i] == '*' && a[i-1] == a[i])not_cho[i] = 1;for (int i = 1; i <= tot; i++)if (!not_cho[i])a[++n] = a[i];cin >> m;  for (int l = 1; l <= m; l++) {scanf("%s",b + 1); len = strlen(b + 1);f[0][0] = ++cnt;for (int i = 1; i <= n; i++)for (int j = 1; j <= len; j++) {if (a[i-1] == '*') {if (a[i] == '?') {if (f[i-2][j-1] == cnt) f[i][j] = cnt;}else if (a[i] == b[j] && f[i-2][j-1] == cnt) f[i][j] = cnt;}if (a[i] == '*') {if (f[i][j-1] == cnt) f[i][j] = cnt;if (f[i-1][j-1] == cnt) f[i][j] = cnt;}else if (a[i] == '?') {if (f[i-1][j-1] == cnt) f[i][j] = cnt;}else if (a[i] == b[j] && f[i-1][j-1] == cnt) f[i][j] = cnt;} if (f[n][len] == cnt) ++ans;else if (a[n] == '*' && f[n-1][len] == cnt) ++ans;}cout << m - ans;return 0;
}

1966: [Ahoi2005]VIRUS 病毒检测相关推荐

  1. bzoj 1966: [Ahoi2005]VIRUS 病毒检测

    题意:给一个模板片段和n个片段,模板中的*可以匹配多个字母,?可以匹配一个字母.问有多少个不匹配的. 题解:dp乱搞就好了.(对拍的时候hack掉了好多个程序) 代码: #include<cst ...

  2. BZOJ1966: [Ahoi2005]VIRUS 病毒检测

    BZOJ1966: [Ahoi2005]VIRUS 病毒检测 Description 科学家们在Samuel星球上的探险仍在继续. 非常幸运的,在Samuel星球的南极附近,探险机器人发现了一个巨大的 ...

  3. 【bzoj 1966】: [Ahoi2005]VIRUS 病毒检测

    http://www.lydsy.com/JudgeOnline/problem.php?id=1966 难道出题人没学过生物?RNA明明是AUCG(啊我真对得起我们生物老师).. 带'*'和'?'的 ...

  4. BZOJ P1966[Ahoi2005]VIRUS 病毒检测

    一开始打了个n^4的暴力记忆化搜索 然后优化了一下对*的状态转移,因为我们的*可以匹配到当前就不匹配 也可以继续匹配下去,所以并不用枚举到底匹配了多长的串 这样转移就可以把程序优化到n^3 下面是代码 ...

  5. BZOJ1966 VIRUS病毒检测

    目录 BZOJ1966 VIRUS病毒检测 题解 code BZOJ1966 VIRUS病毒检测 题目传送门 题解 一道比较神的\(Dp\),首先我们记\(f[i][j]\)表示模板串匹配到第\(i\ ...

  6. 【AHOI2005】病毒检测

    题目描述 科学家们在Samuel星球上的探险仍在继续.非常幸运的,在Samuel星球的南极附近,探险机器人发现了一个巨大的冰湖!机器人在这个冰湖中搜集到了许多RNA片段运回了实验基地. 科学家们经过几 ...

  7. 一文读懂测序技术在新冠病毒检测中的应用(文末附FAQ)

    来源:生物探索 随着世界疫情的发展,多个国家进入公共卫生紧急状态,全球科学家都在抓紧研究更好的检测.治疗.防控手段.从最初未知β属冠状病毒的快速鉴定到病毒序列的完整破译,再到病毒序列的变异监测,高通量 ...

  8. 基于「ClamAv」通过python进行病毒检测(2)-- pyClamd控制clamd详解

    介绍pyClamd模块一般用法和常用方法等. 我们可以使用python来控制clamd,从而操控ClamAv,需要引入第三方模块:pyClamd. 使用pyClamd控制clamd之前,必须先正确安装 ...

  9. PHP文件在线检测病毒,VIRSCAN 在线病毒检测客户端

    /**** 本程序以及提供的源码仅供技术交流使用. 作者不作任何类型担保,在任何情况下都不对使用本软件造成的任何损失或任何相应而生. 间接.附带的损失承担任何责任. ****/importwin.ui ...

最新文章

  1. linux文件属性解析,Linux操作系统的文件属性与目录配置解析
  2. 【Java面试题】3 Java中使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?超详细解析...
  3. postgresql关闭自动提交
  4. scala 方法重载_Scala中的方法重载
  5. EF ++属性会更新实体
  6. html 怎么给li空格,html 空格
  7. html按键变色,按键变色.html
  8. 搭建迁移训练Slim框架环境
  9. linux gdb 导出到文件怎么打开,GDB基本命令从打开文件到调试结束的教程
  10. 快速生成大量测试数据
  11. 多线程有几种实现方法_Java多线程实现有哪几种方法?
  12. ad网络标号怎么用_altium designer网络标号的作用范围
  13. 没有对象,你凭什么成为百万富翁
  14. Java:实现Ternary search三元搜索算法(附完整源码)
  15. 新华三笔试题(助力面试)
  16. 1071: 数塔 (动态规划)
  17. 【MySQL】数据库中的三大范式
  18. 编程训练题:多项式求和
  19. python中的装包与解包*,**
  20. 写布局时,实时显示的模拟器UI底下菜单栏如何去掉

热门文章

  1. goaheadlinux移植_goahead移植
  2. Android 高仿百度地图的LBS服务——离线地图篇 Part 2 (v 3.1.1)
  3. Navicat开启自动提示功能
  4. 访问azkaban页面失败,一直拒绝连接
  5. 多线程与高并发(二) JUC
  6. 数学基础-Jensen不等式
  7. Shell- shell基础知识
  8. 修复登录大河盲盒小程序源码,实现运营“玩法自由”,超多功能的盲盒型挖矿程序源码
  9. 教育硕士专业学位(教育管理)研究生阅读书目或期刊目录
  10. 怎么制作出GIF动态图?制作方法其实非常简单