hdu 3695 Computer Virus on Planet Pandora (没过+TLE)

/*
hdu  3695 TLE 题
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#include<algorithm>
using namespace std;

#define MAXN 5100010
#define MAX 1010
#define N 27

int  Case , n , cnt;
bool vis[MAX];
char text[MAXN];
char tmpStr[MAXN];
char tmp[MAXN];
struct Node{
   Node *next;
   Node *child[N];
   int number;
};
Node node[MAXN];
Node *root;
queue<Node*>q;

Node* newNode(){
   node[cnt].next = NULL;
   node[cnt].number = 0;
   for(int i = 0 ; i < N ; i++)
      node[cnt].child[i] = NULL;
   return &node[cnt++];
}

void insert(char *str , int x){
   int len = strlen(str);
   Node *p = root;

   for(int i = 0 ; i < len ; i++){
      int num = str[i]-'A';
      if(p->child[num] == NULL)
        p->child[num] = newNode();
      p = p->child[num];
   }
   p->number = x;
}

void init(){
   int pos = 0;
   int len = strlen(tmpStr);
   memset(text , '\0' , sizeof(text));
   for(int i = 0 ; i < len ; i++){
      if(isupper(tmpStr[i]))
        text[pos++] = tmpStr[i];
      else if(tmpStr[i] == '[' || tmpStr[i] == ']')
        continue;
      else if(isdigit(tmpStr[i])){
        int num = 0;
        while(isdigit(tmpStr[i]))
            num = num*10+tmpStr[i++]-'0';
        memset(tmp , tmpStr[i] , sizeof(tmp));
        tmp[num] = '\0';
        strcat(text , tmp);
        pos += num;
      }
   }
}

void getNext(){
   while(!q.empty())
      q.pop();

   q.push(root);
   root->next = NULL;

   while(!q.empty()){
      Node *p = q.front();
      q.pop();

      for(int i = 0 ; i < N ; i++){
         if(p->child[i]){
           q.push(p->child[i]);
           Node* tmp = p->next;
           while(tmp){
              if(tmp->child[i]){
                p->child[i]->next = tmp->child[i];
                break;
              }
              tmp = tmp->next;
           }
           if(tmp == NULL)
             p->child[i]->next = root;
         }
      }
   }
}

int find(){
   Node *p = root;
   int len = strlen(text);
   int ans = 0;
   for(int i = 0 ; i < len ; i++){
      int num = text[i]-'A';
      while(p->child[num] == NULL && p != root)
          p = p->next;
      if(p->child[num]){
        p = p->child[num];
        Node *tmp = p;
        while(tmp){
           if(tmp->number && !vis[tmp->number]){
             ans++;
             vis[tmp->number] = true;
           }
           tmp = tmp->next;
        }
      }
   }
   return ans;
}

int main(){

   char str[MAX];
   scanf("%d" , &Case);

   while(Case--){
      scanf("%d" , &n);
      cnt = 0;
      root = newNode();
      memset(vis , false , sizeof(vis));

      for(int i = 0 ; i < n ; i++){
         scanf("%s" , str);
         insert(str , i+1);
         int len = strlen(str);
         reverse(str , str+len);
         insert(str , i+1);
      }
      getNext();
      scanf("%s" , tmpStr);
      init();
      printf("%d\n" , find());
   }
   return 0;
}
时间: 2024-07-31 13:24:08

hdu 3695 Computer Virus on Planet Pandora (没过+TLE)的相关文章

算法:HDU 2196 Computer(树形dp经典)

题意: 给出一棵树,求离每个节点最远的点的距离 思路: 把无根树转化成有根树分析 , 对于上面那棵树,要求距结点 2的最长距离,那么,就需要知道以2为顶点的子树(蓝色圈起的部分,我们叫它Tree(2)),距顶点2的最 远距离L1 还有知道2的父节点1为根节点的树Tree(1)-Tree(2)部分(即红色圈起部分),距离结点1 的最长距离+dist(1,2) = L2,那么最终距离结点2最远的距离就是max{L1,L2} f[i][0],表示顶点为i 的子树的,距顶点i的最长距离 f[i][1],

你不知道网络安全有多严峻

上周六受到企业的邀请讲网络安全,这篇博客是内容的整理. 随着大数据.AI(人工智能)与互联网络的高速发展新的网络安全问题变得越来越严峻,自己身边时不时总有人被网络诈骗,为了更少的人被攻击写了这些文字.   一.网络安全形式严峻 我国从事网络与电信诈骗人数:160万 我国去年网络与电信涉案金额:1152亿 大学生防网络与电信诈骗合格数不足:30%(其它人群估计负数了) 网络与电信诈骗的源发地在境外约:90%  网络上每分钟被手机病毒与木马攻击约:1000000次   大数据与人工智能与其它方面带来

也许下一个倾家荡产的就是你(新形式下的网络安全)

上周六受到企业的邀请讲网络安全,这篇博客是内容的整理. 随着大数据.AI(人工智能)与互联网络的高速发展新的网络安全问题变得越来越严峻,自己身边时不时总有人被网络诈骗,为了更少的人被攻击写了这些文字.   一.网络安全形式严峻 我国从事网络与电信诈骗人数:160万 我国去年网络与电信涉案金额:1152亿 大学生防网络与电信诈骗合格数不足:30%(其它人群估计负数了) 网络与电信诈骗的源发地在境外约:90%  网络上每分钟被手机病毒与木马攻击约:1000000次   大数据与人工智能与其它方面带来

病毒、蠕虫与木马之间的区别

随着互联网的日益流行,各种病毒木马也猖厥起来,几乎每天都有新的病毒产生,大肆传播破坏,给广大互联网用户造成了极大的危害,几乎到了令人谈毒色变的地步.各种病毒,蠕虫,木马纷至沓来,令人防不胜防,苦恼无比.那么,究竟什么是病毒,蠕虫,木马,它们之间又有什么区别?相信大多数人对这个问题并没有一个清晰的了解,在这里,我们就来简单讲讲. 病毒.蠕虫和特洛伊木马是可导致您的计算机和计算机上的信息损坏的恶意程序.它们可能使你的网络和操作系统变慢,危害严重时甚至会完全破坏您的系统,并且,它们还可能使用您的计算机

【DP专辑】ACM动态规划总结

转载请注明出处,谢谢.   http://blog.csdn.net/cc_again?viewmode=list          ----------  Accagain  2014年5月15日 动态规划一直是ACM竞赛中的重点,同时又是难点,因为该算法时间效率高,代码量少,多元性强,主要考察思维能力.建模抽象能力.灵活度. 本人动态规划博客地址:http://blog.csdn.net/cc_again/article/category/1261899 ******************

How Microsoft Lost the API War

 http://www.joelonsoftware.com/articles/APIWar.html How Microsoft Lost the API War By Joel SpolskySunday, June 13, 2004 Here's a theory you hear a lot these days: "Microsoft is finished. As soon as Linux makes some inroads on the desktop and web appl

图说计算机病毒史

计算机病毒由来已久,最初它们只是一些恶作剧,如今有的已经发展成了军事武器.最近有一家名为"Computer Virus Catalog"的网站对计算机病毒历史进行了研究,并且还给每一个病毒配上了图片.在这份历史榜单中,我们病毒主要集中在DOS时 代,特别是上世纪90年代末的病毒繁荣期,当然许多著名的恶意软件也随着时间流逝被淹没在历史长河中.后来,很多病毒都以可视化组件的形式出现,比如有可 视化的电子邮件蠕虫病毒,还有让你的电脑屏幕布满绿色真菌的病毒,当这些可视化恶意软件出现时,你的第一

想成为起码要懂的16个问题_安全教程

问:什么是网络安全? 答:网络安全是指网络系统的硬件.软件及其系统中的数据受到保护,不因偶然的或者恶意的原因而遭到破坏.更改.泄露,系统可以连续可@@正常地运行,网络服务不被中断. 问:什么是计算机病毒? 答:计算机病毒(Computer Virus)是指编制者在计算机程序中插入的破坏计算机功能或者破坏数据,影响计算机使用并且能够自我复制的一组计算机指令或者程序代码. 问:什么是木马? 答:木马是一种带有恶意性质的远程控制软件.木马一般分为客户端(client)和服务器端(server).客户端

浅谈保险业的信息安全

当前世界经济正在从工业经济逐步过渡到知识经济,日新月异的网络技术无疑是这一转变的重要推动力之一,网络已经对全球经济和社会生活产生了不可逆转的影响.但无可否认的是,由于网络的开放性和计算机操作系统的不完善性带来技术应用的负面效应,计算机网络也成为网上信息安全隐患不断孳生的温床.网络信息安全问题的表现形式主要有计算机病毒(Computer Virus).黑客攻击(Hackers Attack).信息混乱(Information Disorder)和信息污染(Information Pollution