反思

对于*符号,明明可以让相同位置再次匹配下一个,或者跳过当前位置匹配,但是却写了个把trie的子树全部push进队列的垃圾写法,结果一直MLE

告辞

思路

模板串多且不长,可以塞到trie树里,这个东西貌似叫trie树上模糊匹配?

然后直接bfs爆搜,注意记录一个vis[i][j],表示第i个节点和第j个位置匹配的情况是否被搜过了,然后小心空间就好了

代码

需要O2

#include <cstdio>
#include <algorithm>
#include <cstring>
#include <bitset>
#include <queue>
using namespace std;
int trie[191000][4],Nodecnt,mark[190010],root,ans=0,lens,n,lent;
char s[1010],t[1010];
bitset<191010> vis[1000];
struct QNode{
int pos,numNode;
QNode(int a,int b){
pos=a,numNode=b;
}
};
queue<QNode> q;
int to(char c){
if(c=='A')
return 0;
if(c=='G')
return 1;
if(c=='C')
return 2;
if(c=='T')
return 3;
}
void insert(char *s,int len){
int o=root;
for(int i=1;i<=len;i++){
if(!trie[o][to(s[i])])
trie[o][to(s[i])]=++Nodecnt;
o=trie[o][to(s[i])];
}
mark[o]++;
}
void dfs(int pos,int o){
q.push(QNode(pos,o));
for(int i=0;i<4;i++)
if(trie[o][i])
dfs(pos,trie[o][i]);
}
void query(void){
q.push(QNode(1,0));//pos Node
while(!q.empty()){
QNode x=q.front();
q.pop();
if(vis[x.pos][x.numNode])
continue;
vis[x.pos][x.numNode]=true;
// printf("pos=%d numNode=%d\n",x.pos,x.numNode);
if(x.pos==lens+1){
ans+=mark[x.numNode];
continue;
}
if(s[x.pos]=='*'){
q.push(QNode(x.pos+1,x.numNode));
for(int i=0;i<4;i++)
if(trie[x.numNode][i])
q.push(QNode(x.pos+1,trie[x.numNode][i]));
for(int i=0;i<4;i++)
if(trie[x.numNode][i])
q.push(QNode(x.pos,trie[x.numNode][i]));
}
else if(s[x.pos]=='?'){
for(int i=0;i<4;i++)
if(trie[x.numNode][i])
q.push(QNode(x.pos+1,trie[x.numNode][i]));
}
else{
if(trie[x.numNode][to(s[x.pos])])
q.push(QNode(x.pos+1,trie[x.numNode][to(s[x.pos])]));
}
}
}
int main(){
// freopen("5.in","r",stdin);
scanf("%s",s+1);
lens=strlen(s+1);
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%s",t+1);
lent=strlen(t+1);
insert(t,lent);
}
query();
printf("%d\n",n-ans);
return 0;
}

P2536 [AHOI2005]病毒检测的更多相关文章

  1. Luogu P2536 [AHOI2005]病毒检测

    题意 给一个有通配符的模式串和 \(n\) 个文本串,其中 ? 可以匹配任意字符,* 可以匹配 \(0\) 或任意多个字符,求 \(n\) 个文本串中无法与模式串匹配的数量. \(\texttt{Da ...

  2. 【BZOJ1966】[AHOI2005]病毒检测(动态规划)

    [BZOJ1966][AHOI2005]病毒检测(动态规划) 题面 BZOJ 洛谷 题解 我就蒯了一份代码随便改了改怎么就过了??? 从这道题目蒯的 代码: #include<iostream& ...

  3. [AHOI2005]病毒检测

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

  4. 【[AHOI2005]病毒检测】

    \(Trie\) 树+搜索 我用的是\(dfs\) 首先对于将所有的RNA片段都建到\(Trie\)树里去,之后来匹配那个模板串就好了 如果是匹配的位置是字母,那么我们就继续往下匹配 如果是\(?\) ...

  5. bzoj1966:[AHOI2005]病毒检测

    传送门 我也没想到map如此垃圾,bitset优秀啊 直接trie树上搜索就好了 代码: #include<cstdio> #include<iostream> #includ ...

  6. 基于深度学习的病毒检测技术无需沙箱环境,直接将样本文件转换为二维图片,进而应用改造后的卷积神经网络 Inception V4 进行训练和检测

    话题 3: 基于深度学习的二进制恶意样本检测 分享主题:全球正在经历一场由科技驱动的数字化转型,传统技术已经不能适应病毒数量飞速增长的发展态势.而基于沙箱的检测方案无法满足 APT 攻击的检测需求,也 ...

  7. bzoj1966: [Ahoi2005]VIRUS 病毒检测

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

  8. 【AHOI2005】病毒检测

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

  9. BZOJ1966 [Ahoi2005]VIRUS 病毒检测 动态规划

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1966 题意概括 现在有一些串和一个病毒模板.让你统计非病毒串的总数.串个数<=500. 串由 ...

随机推荐

  1. AssetBoundle加载非预设资源

    1.定义一个协程LoadNonObjFromAB IEnumerator LoadNonObjFromAB(string ABURL, GameObject go, string assetName) ...

  2. 【转】Requests 官方中文文档 - 快速上手

    迫不及待了吗?本页内容为如何入门 Requests 提供了很好的指引.其假设你已经安装了 Requests.如果还没有,去安装一节看看吧. 首先,确认一下: Requests 已安装 Requests ...

  3. Keep On Movin (贪心)

    #include<bits/stdc++.h> using namespace std; int main(){ int T, n, a;scanf("%d",& ...

  4. MyBatis学习笔记(二)——使用MyBatis对表执行CRUD操作

    转自孤傲苍狼的博客:http://www.cnblogs.com/xdp-gacl/p/4262895.html 上一篇博文MyBatis学习总结(一)——MyBatis快速入门中我们讲了如何使用My ...

  5. 关于JS的几个基础题目

    1.截取字符串abcdefg的efg alert("abcdefg".substring(4)); 2.判断一个字符串中出现次数最多的字符,统计这个次数 var str = 'as ...

  6. php小数加减精度问题,比特币计算精度问题

    php小数加减精度问题,比特币计算精度问题 在php开发时,有小数加减的场景.结果发现不能够等于预想的值,bccomp比较二个高精确度数字.语法: int bccomp(string left ope ...

  7. AtCoder Beginner Contest 044 B - 美しい文字列 / Beautiful Strings

    Time limit : 2sec / Memory limit : 256MB Score : 200 points Problem Statement Let w be a string cons ...

  8. Symfony2 UserSecurityEncoder实现自己的验证方式

    fosuserbundle默认使用sha512加密 如果要实现自己的加密方式 需要继承Symfony\Component\Security\Core\Encoder\BasePasswordEncod ...

  9. HTML(续)

    1.有frame就无body,框架的noresize:设置框架大小不能改变.2.链接在框架中的应用target:有定为目标的功能.<a href = "链接源地址" targ ...

  10. show processlist命令与kill 线程

    show [full] processlist show processlist显示正在运行的线程.如果有process权限,则可以查看所有正在运行的线程.否则,只能看到自己的线程.如果不使用full ...