反思

对于*符号,明明可以让相同位置再次匹配下一个,或者跳过当前位置匹配,但是却写了个把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. Yii2 数据缓存/片段缓存/页面缓存/Http缓存

  2. mysql 对表字段进行长度截取操作

    现在的问题是数据库某一个表中其中的车牌号字段有些数据多了一位,需要把它找出来然后把多的最后一位去掉..... 通过自带的length(字段名)函数把长度过长的数据过滤出来,其中,一个汉字算3个字符,一 ...

  3. turtle库基础练习

    1.画一组同切圆 import turtle turtle.circle(10) turtle.circle(20) turtle.circle(30) turtle.circle(40) turtl ...

  4. io 流概念

    io 流概念 对输入输出抽象的封装

  5. SQLServer 创建自己的数据库

    1)进入数据库服务器,创建自己的数据库 use master go create database Dt_Devtest on primary(name=[Dt_new_data],filename= ...

  6. Jmeter自己jar包的引用

    1.编写清空指定文件夹里所有内容的jar包 package org.na;import java.io.File;public class deletedir {    public static b ...

  7. 配置开发环境2——eclipse配置

    纯手动配置eclipse, Eclipse配置 配置工作空间的编码方式 General—Workspace:改成Other:UTF-8 配置property的编码方式 配置maven Window — ...

  8. mybatis源码解析4---Configuration解析

    Configuration类解析 Configuration类位于mybatis包的org.apache.ibatis.session目录下,是mybatis的全局变量,属性就是对应于mybatis的 ...

  9. 转:wcf大文件传输解决之道(2)

    此篇文章主要是基于http协议应用于大文件传输中的应用,现在我们先解析下wcf中编码器的定义,编码器实现了类的编码,并负责将Message内存中消息转变为网络发送的字节流或者字节缓冲区(对于发送方而言 ...

  10. javascript 链式写法

    熟悉Jquery的同学都知道,它对dom的操作基本都链式调用的写法,这种给人感觉就是很简洁,易懂,而且最大的好处就是避免多次重复使用一个对象变量. 链式的实现方式:链式操作是在对象的方法中通过最后返回 ...