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. 串由 ...
随机推荐
- html5-fieldset和legend和keygen元素的用法
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8&qu ...
- mybatis-config.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC ...
- CSS选择符-----关系选择符
包含选择符(E F) 选择所有被E元素包含的F元素 与 子选择符(E>F) 不同的是,包含选择符将会命中所有符合条件的后代,包括儿子,孙子,孙子的孙子... <! ...
- Locust 设置响应断言
转:http://www.testclass.net/locust/assert/ 性能测试也需要设置断言么? 某些情况下是需要,比如你在请求一个页面时,就可以通过状态来判断返回的 HTTP 状态码是 ...
- 2017-2018-2 20165215 实验四《Android开发基础》实验报告
2017-2018-2 20165215 实验四<Android开发基础>实验报告 一.实验报告封面 课程:Java程序设计 班级:1652班 姓名:张家佳 学号:20165215 指导教 ...
- IDEA相关知识整理
一.离线下载插件[也可以通过代理的方式下载插件] http://plugins.jetbrains.com/ 下载离线插件 settings -> plugins -> install p ...
- Google Analytics for Firebase 是一款免费的应用评估解决方案,可提供关于应用使用和用户互动情况的数据分析
Google Analytics for Firebase Google Analytics for Firebase 是一款免费的应用评估解决方案,可提供关于应用使用和用户互动情况的数据分析.Fir ...
- System.getSecurityManager()
https://www.cnblogs.com/yiwangzhibujian/p/6207212.html java安全管理器SecurityManager入门 一.文章的目的 这是一篇对Jav ...
- [转载]PowerDesigner生成的ORACLE 建表脚本中去掉对象的双引号,设置大、小写
若要将 CDM 中将 Entity的标识符都设为指定的大小写,则可以这么设定: 打开cdm的情况下,进入Tools-Model Options-Naming Convention,把Name和Code ...
- 洛谷 P1010 幂次方
做了好久,递归拆吧 #include<iostream>#include<cstdio>#include<cmath>using namespace std;int ...