病毒侵袭 - HDU 2896(AC自动机)
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<queue>
using namespace std; const int MAXN = 1e6+;
const int MAXM = ;
const int oo = 1e9+; char webStr[MAXN], s[MAXN];
int ans[MAXN], top;///保存某个网站被那些病毒侵占了 struct node
{
node *Fali, *next[MAXM];
int leaf, nweb;///已经被第n个web匹配过了
}; void Insert(node *root, char s[], int num)
{
node *p = root; for(int i=; s[i]; i++)
{
int k = (int)s[i]; if(p->next[k] == NULL)
p->next[k] = new node();
p = p->next[k];
} p->leaf = num;
}
void GetFial(node *root)
{
node *p = root, *temp;
queue<node *> Q; for(int i=; i<MAXM; i++) if(p->next[i])
{
p->next[i]->Fali = root;
Q.push(p->next[i]);
} while(Q.size())
{
p = Q.front();
Q.pop(); for(int i=; i<MAXM; i++)if(p->next[i])
{
temp = p->Fali; while(temp != NULL)
{
if(temp->next[i] != NULL)
{
p->next[i]->Fali = temp->next[i];
break;
} temp = temp->Fali;
} if(temp == NULL)
p->next[i]->Fali = root; Q.push(p->next[i]);
}
}
}
void FreeTrie(node *root)
{
node *p = root; for(int i=; i<MAXM; i++)
{
if(p->next[i])
FreeTrie(p->next[i]);
} free(p);
}
void Query(node *root, int nweb)
{
node *p = root, *temp; for(int i=; webStr[i]; i++)
{
int k = (int)webStr[i]; while(!p->next[k] && p!=root)
p = p->Fali; if(!p->next[k])continue; temp = p = p->next[k]; while(temp != root && temp->nweb != nweb)
{
if(temp->leaf)
ans[top++] = temp->leaf;
temp->nweb = nweb;
}
}
} int main()
{
int i, N, M; while(scanf("%d", &N) != EOF)
{
node *root = new node(); for(i=; i<=N; i++)
{
scanf("%s", s);
Insert(root, s, i);
} GetFial(root);
scanf("%d", &M); int total = ; for(i=; i<=M; i++)
{
scanf("%s", webStr); top = ;
Query(root, i); if(top)
{
sort(ans, ans+top); printf("web %d:", i);
for(int j=; j<top; j++)
printf(" %d", ans[j]);
printf("\n"); total += ;
}
} printf("total: %d\n", total); FreeTrie(root);
} return ;
}
病毒侵袭 - HDU 2896(AC自动机)的更多相关文章
- hdu 2896 AC自动机
// hdu 2896 AC自动机 // // 题目大意: // // 给你n个短串,然后给你q串长字符串,要求每个长字符串中 // 是否出现短串,出现的短串各是什么 // // 解题思路: // / ...
- HDU 3065 病毒侵袭持续中 (AC自动机)
题目链接 Problem Description 小t非常感谢大家帮忙解决了他的上一个问题.然而病毒侵袭持续中.在小t的不懈努力下,他发现了网路中的"万恶之源".这是一个庞大的病毒 ...
- hdu3065 病毒侵袭持续中 AC自动机入门题 N(N <= 1000)个长度不大于50的模式串(保证所有的模式串都不相同), 一个长度不大于2000000的待匹配串,求模式串在待匹配串中的出现次数。
/** 题目:hdu3065 病毒侵袭持续中 链接:http://acm.hdu.edu.cn/showproblem.php?pid=3065 题意:N(N <= 1000)个长度不大于50的 ...
- HDU 2896 (AC自动机模板题)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2896 题目大意:多个模式串.多个匹配串.其中串的字符范围是(0~127).问匹配串中含有哪几个模式串 ...
- 病毒侵袭---hdu2896(AC自动机)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2896 输入的字符是所有可见的ASCII码(共有127个)所以要注意一下: 把结果存到一个数组中,然后输 ...
- 病毒侵袭 HDU - 2896 板子题
当太阳的光辉逐渐被月亮遮蔽,世界失去了光明,大地迎来最黑暗的时刻....在这样的时刻,人们却异常兴奋--我们能在有生之年看到500年一遇的世界奇观,那是多么幸福的事儿啊~~ 但网路上总有那么些网站,开 ...
- hdu----(3065)病毒侵袭持续中(AC自动机)
病毒侵袭持续中 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Sub ...
- hdoj 3065 病毒侵袭持续中(AC自动机)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3065 思路分析:问题需要模式匹配多个模式串,需要注意的是模式串会包含和重叠,需要对AC自动机的匹配过 ...
- [hdu3065]病毒侵袭持续中(AC自动机)
题意:给出多种病毒的号码和特征码,计算在某串中各病毒匹配的次数. 解题关键:AC自动机模板题,多组输入坑人. #include<bits/stdc++.h> using namespace ...
- HDU3065 病毒侵袭持续中 —— AC自动机
题目链接:https://vjudge.net/problem/HDU-3065 病毒侵袭持续中 Time Limit: 2000/1000 MS (Java/Others) Memory Li ...
随机推荐
- 如何利用C#编写网页投票器程序 如何使用代理来投票 代理IP来投票
一.前言看个图,了解下投票的过程.提交投票信息投票页 ――――――――>投票信息处理页反馈投票结果(请求页)<―――――――(响应页)一般情况下,填写投票信息,然后点提交按钮发送到响应 ...
- 那些年,我们一起学WCF--(7)PerSession实例行为
这一节,大家了解下PerSession实例行为,PerSession表示会话实例行为,当客户端调用服务器后,服务器端会为客户端分配一个新的服务实例,这个实例在服务器端SESSION时间过期后将失效.客 ...
- while read line无法循环read文件
while read line 与for循环的区别 例子:要从一个ip列表中获取ip.port,然后ssh ip 到目标机器进行特定的command操作ssh -o StrictHostKeyChec ...
- C# 多个线程一直跑着While(true)
在使用多线程的时候,开了多个线程一直在While(true),会造成CPU占用很高.这时候要在线程内加入一句Thread.Sleep(1),让他稍微睡一下.就不会消耗那么多CPU了. 代码: Thre ...
- JS实现页面跳转重定向的几种方式
1.重定向 <script language="javascript"type="text/javascript"> window.locatio ...
- 浮点数精确表示,java陷阱
/** 浮点数表示问题 @author husky */ public class Change { public static void main(String[] args) { double n ...
- Qt经典出错信息之”Basic XLib functionality test failed!”
解决方法: 此完整出错信息是在./configure阶段Basic XLib functionality test failed!You might need to modify the includ ...
- yii2源码学习笔记(五)
Event是所有事件类的基类.它封装了与事件相关的参数. yii2\base\Event.php <?php /** * @link http://www.yiiframework.com/ * ...
- JS获取select选中的值
var oSel=oFl.getElementsByTagName('select')[0]; oSel.onchange=function(){ var indexselect=oSel.selec ...
- C语言连接数据库
举个例子,连接SQL: // 打开数据库 strDBClass.Format(_T("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s;Jet ...