bzoj1966:[AHOI2005]病毒检测
传送门
我也没想到map如此垃圾,bitset优秀啊
直接trie树上搜索就好了
代码:
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<bitset>
#include<queue>
using namespace std;
void read(int &x) {
char ch; bool ok;
for(ok=0,ch=getchar(); !isdigit(ch); ch=getchar()) if(ch=='-') ok=1;
for(x=0; isdigit(ch); x=x*10+ch-'0',ch=getchar()); if(ok) x=-x;
}
#define rg register
const int maxn=1010,mod=1e4;
struct oo{int x;short y;};queue<oo>q;bitset<maxn>mp[250010];bool ed[250010];
int n,m,rt=1,id=1,ch[250010][5];char s[maxn],ss[510];short w[500],ans;
void insert(char *s,int d)
{
int len=strlen(s+1);rt=1;
for(rg int i=1;i<=len;i++)
{
int now=w[s[i]];
if(!ch[rt][now])ch[rt][now]=++id;
rt=ch[rt][now];
}
ed[rt]=1;
}
void bfs()
{
q.push((oo){1,0});mp[1][0]=1;
while(!q.empty())
{
oo x=q.front();q.pop();
if(ed[x.x]&&x.y==m){ans++;continue;}
if(w[s[x.y+1]]&&ch[x.x][w[s[x.y+1]]]&&!mp[ch[x.x][w[s[x.y+1]]]][x.y+1]){q.push((oo){ch[x.x][w[s[x.y+1]]],x.y+1}),mp[ch[x.x][w[s[x.y+1]]]][x.y+1]=1;continue;}
if(s[x.y+1]=='?')for(rg int i=1;i<=4;i++){if(ch[x.x][i]&&!mp[ch[x.x][i]][x.y+1])q.push((oo){ch[x.x][i],x.y+1}),mp[ch[x.x][i]][x.y+1]=1;}
if(s[x.y+1]=='*')
{
for(rg int i=1;i<=4;i++)if(ch[x.x][i]&&!mp[ch[x.x][i]][x.y])q.push((oo){ch[x.x][i],x.y}),mp[ch[x.x][i]][x.y]=1;
if(!mp[x.x][x.y+1])q.push((oo){x.x,x.y+1}),mp[x.x][x.y+1]=1;
}
}
}
int main()
{
scanf("%s",s+1),m=strlen(s+1),read(n);w['A']=1,w['G']=2,w['C']=3,w['T']=4;
for(rg int i=1;i<=n;i++)scanf("%s",ss+1),insert(ss,i);
bfs();printf("%d\n",n-ans);
}
bzoj1966:[AHOI2005]病毒检测的更多相关文章
- 【BZOJ1966】[AHOI2005]病毒检测(动态规划)
[BZOJ1966][AHOI2005]病毒检测(动态规划) 题面 BZOJ 洛谷 题解 我就蒯了一份代码随便改了改怎么就过了??? 从这道题目蒯的 代码: #include<iostream& ...
- [AHOI2005]病毒检测
Description 科学家们在Samuel星球上的探险仍在继续.非常幸运的,在Samuel星球的南极附近,探险机器人发现了一个巨大的冰湖!机器人在这个冰湖中搜集到了许多RNA片段运回了实验基地.科 ...
- P2536 [AHOI2005]病毒检测
反思 对于*符号,明明可以让相同位置再次匹配下一个,或者跳过当前位置匹配,但是却写了个把trie的子树全部push进队列的垃圾写法,结果一直MLE 告辞 思路 模板串多且不长,可以塞到trie树里,这 ...
- 【[AHOI2005]病毒检测】
\(Trie\) 树+搜索 我用的是\(dfs\) 首先对于将所有的RNA片段都建到\(Trie\)树里去,之后来匹配那个模板串就好了 如果是匹配的位置是字母,那么我们就继续往下匹配 如果是\(?\) ...
- Luogu P2536 [AHOI2005]病毒检测
题意 给一个有通配符的模式串和 \(n\) 个文本串,其中 ? 可以匹配任意字符,* 可以匹配 \(0\) 或任意多个字符,求 \(n\) 个文本串中无法与模式串匹配的数量. \(\texttt{Da ...
- 基于深度学习的病毒检测技术无需沙箱环境,直接将样本文件转换为二维图片,进而应用改造后的卷积神经网络 Inception V4 进行训练和检测
话题 3: 基于深度学习的二进制恶意样本检测 分享主题:全球正在经历一场由科技驱动的数字化转型,传统技术已经不能适应病毒数量飞速增长的发展态势.而基于沙箱的检测方案无法满足 APT 攻击的检测需求,也 ...
- BZOJ1966 [Ahoi2005]VIRUS 病毒检测 动态规划
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1966 题意概括 现在有一些串和一个病毒模板.让你统计非病毒串的总数.串个数<=500. 串由 ...
- [bzoj1966][Ahoi2005][VIRUS 病毒检测] (字符串dp)
Description 科学家们在Samuel星球上的探险仍在继续.非常幸运的,在Samuel星球的南极附近,探险机器人发现了一个巨大的冰湖!机器人在这个冰湖中搜集到了许多RNA片段运回了实验基地.科 ...
- bzoj1966: [Ahoi2005]VIRUS 病毒检测
Description 科学家们在Samuel星球上的探险仍在继续.非常幸运的,在Samuel星球的南极附近,探险机器人发现了一个巨大的冰湖!机器人在这个冰湖中搜集到了许多RNA片段运回了实验基地.科 ...
随机推荐
- github 工具命令集
- AndroidPageObjectTest_Chained.java
以下代码使用ApiDemos-debug.apk进行测试 //这个脚本用于演示PageFactory的功能:链式注解@AndroidFindBys.@IOSFindBys.具体用法参考页面类的代码. ...
- go 包的问题
同一个包下的所有方法,都整合到一个里面去了,通过包名可以任意调用包下的方法. 文件夹的名字必须要和文件里面的package的名字一样,否则会报错... 导文件就是文件所在的包 导包import(),是 ...
- html5--5-9 绘制扇形
html5--5-9 绘制扇形 学习要点 综合运用已经学过的知识绘制一个扇形 矩形的绘制方法 rect(x,y,w,h)创建一个矩形 strokeRect(x,y,w,hx,y,w,h) 绘制矩形(无 ...
- Understand JavaScript’s “this” With Clarity, and Master It
The this keyword in JavaScript confuses new and seasoned JavaScript developers alike. This article a ...
- 乐曲主题Musical Themes
SA例题 题面 对于串 \(S\) 的两个子串 \(A\) 和 \(B\) ,满足 \(k = |A| = |B|\),\(\exists c \forall i\, a_i + c=b_i\),且 ...
- linux 查看某进程 并杀死进程 ps grep kill
Linux 中使用top 或 ps 查看进程使用kill杀死进程 1.使用top查看进程: $top 进行执行如上命令即可查看top!但是难点在如何以进程的cpu占用量进行排序呢? cpu占用量排序执 ...
- PYTHON 异常处理 一 ASSERT
assert语句,如果没记错,这个东西在C或者C++里面也有的.属于短小的断言.下面的是来自python help document的说明: Assert statements are a conve ...
- 谈谈Spring Ioc的理解
原文:http://blog.csdn.net/qq_22654611/article/details/52606960 学了几天Ioc了,但是对它的理解还是模模糊糊,看了这篇博客感觉对Ioc有了更深 ...
- Java编程环境IntelliJ IDEA
1. 下载并安装jdk,进行配置 https://www.cnblogs.com/zhangchao0515/p/6806408.html 2. 下载并安装 IntelliJ IDEA, 并进行破解 ...