ACM HDOJ 2896 (病毒侵袭)
来源:互联网 发布:网页优化 编辑:程序博客网 时间:2024/04/29 05:37
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=2896
import java.util.LinkedList;import java.util.PriorityQueue;import java.util.Queue;import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scn = new Scanner(System.in);while (scn.hasNext()) {Trie trie = new Trie();int virusNumber = Integer.parseInt(scn.nextLine());while (0 <= --virusNumber) {trie.insert(scn.nextLine());}trie.build();int count = 0;int websNumber = Integer.parseInt(scn.nextLine());for (int i = 1; i <= websNumber; ++i) {Queue<Integer> queue = trie.search(scn.nextLine());if (!queue.isEmpty()) {System.out.print("web " + i + ":");while (!queue.isEmpty()) {System.out.print(" " + queue.poll());}System.out.println();++count;}}System.out.println("total: " + count);trie = null;}scn.close();}}class Trie {private Node root;private int number;public Trie() {root = new Node(new Node[95], null, 0);number = 0;}public void insert(String str) {Node current = root;for (int i = 0; i < str.length(); ++i) {int index = str.charAt(i) - 32;if (null == current.getChildrenItem(index)) {current.setChildrenItem(index, new Node(new Node[95], null, 0));}current = current.getChildrenItem(index);}current.setNumber(++number);}public void build() {Queue<Node> queue = new LinkedList<Node>();queue.offer(root);while (!queue.isEmpty()) {Node current = queue.poll();for (int i = 0; i < 95; ++i) {if (null != current.getChildrenItem(i)) {if (current == root) {current.getChildrenItem(i).setFail(root);} else {Node fail = current.getFail();while (null != fail) {if (null != fail.getChildrenItem(i)) {current.getChildrenItem(i).setFail(fail.getChildrenItem(i));break;}fail = fail.getFail();}if (null == fail) {current.getChildrenItem(i).setFail(root);}}queue.offer(current.getChildrenItem(i));}}}}public Queue<Integer> search(String str) {Node current = root;Queue<Integer> queue = new PriorityQueue<Integer>();for (int i = 0; i < str.length(); ++i) {int index = str.charAt(i) - 32;while (null == current.getChildrenItem(index) && current != root) {current = current.getFail();}current = current.getChildrenItem(index);if (null == current) {current = root;}Node end = current;while (end != root) {if (0 != end.getNumber()) {if (!queue.contains(end.getNumber())) {queue.add(end.getNumber());if (3 == queue.size()) {return queue;}current = root;break;}}end = end.getFail();}}return queue;}}class Node {private Node[] children;private Node fail;private int number;public Node(Node[] children, Node fail, int number) {this.children = children;this.fail = fail;this.number = number;}public Node getChildrenItem(int i) {return children[i];}public void setChildrenItem(int i, Node node) {children[i] = node;}public Node getFail() {return fail;}public void setFail(Node fail) {this.fail = fail;}public int getNumber() {return number;}public void setNumber(int number) {this.number = number;}}
0 0
- ACM HDOJ 2896 (病毒侵袭)
- HDOJ 2896 病毒侵袭
- HDOJ-2896 病毒侵袭
- HDOJ 2896 病毒侵袭
- 【AC自动机】 HDOJ 2896 病毒侵袭
- hdoj-2896病毒侵袭(AC自动机)
- HDU ACM 2896病毒侵袭->AC自动机
- HDOJ 题目2896 病毒侵袭(AC自动机)
- hdu 2896 病毒侵袭
- hdu 2896 病毒侵袭
- hdu 2896 病毒侵袭
- hdu 2896 病毒侵袭
- HDU 2896 病毒侵袭
- hdu 2896 病毒侵袭
- HDU 2896病毒侵袭
- HDU 2896 病毒侵袭
- HDU 2896 病毒侵袭
- hdu 2896 病毒侵袭
- ACM HDOJ 2222 (Keywords Search)
- Axis2 WebService(配置、发布、调用)
- treap模板(set,map,multiset, 可持久化treap)
- UIView
- 用jquery实现视频展示效果
- ACM HDOJ 2896 (病毒侵袭)
- 中文真是博大精深,外资企业本土化的必要性
- 经典暴利的剥头皮EA下载-sofia
- 每日一练(六)多窗口显示
- 编写一个程序,它读取一个文件以判断其中的字节数,然后使用0覆盖所有的字节
- GoTrace快递查询
- Problem 1402 猪的安家(中国余数定理)
- ACM POJ 1204 (Word Puzzles)
- 待学习