P2536 [AHOI2005]病毒检测
反思
对于*符号,明明可以让相同位置再次匹配下一个,或者跳过当前位置匹配,但是却写了个把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]病毒检测的更多相关文章
- Luogu P2536 [AHOI2005]病毒检测
题意 给一个有通配符的模式串和 \(n\) 个文本串,其中 ? 可以匹配任意字符,* 可以匹配 \(0\) 或任意多个字符,求 \(n\) 个文本串中无法与模式串匹配的数量. \(\texttt{Da ...
- 【BZOJ1966】[AHOI2005]病毒检测(动态规划)
[BZOJ1966][AHOI2005]病毒检测(动态规划) 题面 BZOJ 洛谷 题解 我就蒯了一份代码随便改了改怎么就过了??? 从这道题目蒯的 代码: #include<iostream& ...
- [AHOI2005]病毒检测
Description 科学家们在Samuel星球上的探险仍在继续.非常幸运的,在Samuel星球的南极附近,探险机器人发现了一个巨大的冰湖!机器人在这个冰湖中搜集到了许多RNA片段运回了实验基地.科 ...
- 【[AHOI2005]病毒检测】
\(Trie\) 树+搜索 我用的是\(dfs\) 首先对于将所有的RNA片段都建到\(Trie\)树里去,之后来匹配那个模板串就好了 如果是匹配的位置是字母,那么我们就继续往下匹配 如果是\(?\) ...
- bzoj1966:[AHOI2005]病毒检测
传送门 我也没想到map如此垃圾,bitset优秀啊 直接trie树上搜索就好了 代码: #include<cstdio> #include<iostream> #includ ...
- 基于深度学习的病毒检测技术无需沙箱环境,直接将样本文件转换为二维图片,进而应用改造后的卷积神经网络 Inception V4 进行训练和检测
话题 3: 基于深度学习的二进制恶意样本检测 分享主题:全球正在经历一场由科技驱动的数字化转型,传统技术已经不能适应病毒数量飞速增长的发展态势.而基于沙箱的检测方案无法满足 APT 攻击的检测需求,也 ...
- bzoj1966: [Ahoi2005]VIRUS 病毒检测
Description 科学家们在Samuel星球上的探险仍在继续.非常幸运的,在Samuel星球的南极附近,探险机器人发现了一个巨大的冰湖!机器人在这个冰湖中搜集到了许多RNA片段运回了实验基地.科 ...
- 【AHOI2005】病毒检测
题目描述 科学家们在Samuel星球上的探险仍在继续.非常幸运的,在Samuel星球的南极附近,探险机器人发现了一个巨大的冰湖!机器人在这个冰湖中搜集到了许多RNA片段运回了实验基地. 科学家们经过几 ...
- BZOJ1966 [Ahoi2005]VIRUS 病毒检测 动态规划
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1966 题意概括 现在有一些串和一个病毒模板.让你统计非病毒串的总数.串个数<=500. 串由 ...
随机推荐
- Codeforces Round #322 (Div. 2) E F
E. Kojiro and Furrari 题意说的是 在一条直线上 有n个加油站, 每加一单位体积的汽油 可以走1km 然后每个加油站只有一种类型的汽油,汽油的种类有3种 求从起点出发到达终点要求使 ...
- verilog代码基础
verilog拼接符用法: https://zhidao.baidu.com/question/531343285.html wire [31:0] bit_mask = { {8{be[3]}}, ...
- 设计模式之Factory(工厂)(转)
定义:提供创建对象的接口. 为何使用? 工厂模式是我们最常用的模式了,著名的Jive论坛 ,就大量使用了工厂模式,工厂模式在Java程序系统可以说是随处可见. 为什么工厂模式是如此常用?因为工厂模式就 ...
- 环绕声5.1ch
简单说5.1ch就是数字影院中的音频输出术语,环绕立体声输出,让人有置身电影院的感觉,由五个音箱(两个主音箱.两个环绕箱.一个中置箱)+一个低音炮组成 5.1环绕声包括了5个全频带声道和 1个低频效果 ...
- Redis内存分析方法
一般会采用 bgsave 生成 dump.rdb 文件,再结合 redis-rdb-tools 和 sqlite 来进行静态分析. BGSAVE:在后台异步(Asynchronously)保存当前数据 ...
- 动手动脑-Java的方法重载
例: Using overloaded methods public class MethodOverload { public static void main(String[] args) { ...
- JavaUtil smtp 邮件发送
需要用到的jar包:javax.mail.jar package com.lee.util; import java.io.UnsupportedEncodingException; import j ...
- js call 和 apply方法记录
最近看到一篇很好的讲解apply和call的文章转了过来,若涉及版权问题请联系本人删除 1. 每个函数都包含两个非继承而来的方法:call()方法和apply()方法. 2. 相同点:这两个方法的作用 ...
- The Little Prince-12/11
The Little Prince-12/11 最后一段话!!!hha,傻傻的我们...... 成人们对数字情有独钟.如果你为他们介绍一个朋友,他们从不会问你“他的嗓子怎么样?他爱玩什么游戏?他会采集 ...
- Eloquent JavaScript #10# Modules
索引 Notes 背景问题 模块Modules 软件包Packages 简易模块 Evaluating data as code CommonJS modules ECMAScript modules ...