2014 网选 5007 Post Robot(暴力或者AC_自动机(有点小题大作了))

简介:
//暴力,从每一行的开始处开始寻找要查询的字符
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;

char str[100005];

int main(){
    while(gets(str)){
        for(int i=0; str[i]; ++i)
            if(str[i]=='A'){
                if(strstr(str+i, "Apple") == str+i)
                    printf("MAI MAI MAI!\n");
            }
            else if(str[i]=='i'){
                if(strstr(str+i, "iPhone") == str+i || strstr(str+i, "iPod") == str+i || strstr(str+i, "iPad") == str+i)
                    printf("MAI MAI MAI!\n");
            }
            else if(str[i]=='S')
                if(strstr(str+i, "Sony") == str+i)
                    printf("SONY DAFA IS GOOD!\n");
    }
    return 0;
} 
复制代码
复制代码
 1 //将要匹配的字符串(也就是题目中查询文本中出现的5个单词)建立trie树,然后生成AC_自动机.....
 2 #include<iostream>
 3 #include<cstring>
 4 #include<queue>
 5 #include<cstdio>
 6 #include<algorithm>
 7 using namespace std;
 8 
 9 int trie[30][200];
10 int vis[30], fail[6000];//vis标记的是单词的末尾字符所在的节点
11 char str[][10] = {"Apple", "iPhone", "iPod", "iPad", "Sony"};
12 int cnt;
13 void buildT(){
14     for(int i=0; i<5; ++i){
15         int u=0;
16         for(int j=0; str[i][j]; ++j){
17             if(trie[u][str[i][j]] == 0)
18                 trie[u][str[i][j]] = ++cnt;
19             u=trie[u][str[i][j]];
20         }
21         vis[u]=1;
22     }
23 }
24 
25 void getFail(){
26     queue<int>q;
27     for(int i=0; i<200; ++i)
28         if(trie[0][i]) q.push(trie[0][i]);
29     while(!q.empty()){
30         int u = q.front();
31         q.pop();
32         int v;
33         for(int i=0; i<200; ++i)
34             if(v = trie[u][i]){
35                 fail[v] = trie[fail[u]][i];
36                 q.push(v);
37             }
38             else
39                 trie[u][i] = trie[fail[u]][i];
40     }
41 }
42 
43 void getText(char *ch){
44     int u=0;
45     for(int i=0; ch[i]; ++i){
46         int v = trie[u][ch[i]];
47         u=v;
48         while(v){
49             if(vis[v] && (ch[i]=='d' || ch[i]=='e'))
50                 printf("MAI MAI MAI!\n");
51             else if(vis[v] && ch[i]=='y')
52                 printf("SONY DAFA IS GOOD!\n"); 
53             v = fail[v];
54         }
55     }
56 }
57 
58 char text[10000];
59 
60 int main(){
61     buildT();
62     getFail();
63     while(gets(text)){
64         getText(text);
65     }
66     return 0;
67 }
复制代码









本文转自 小眼儿 博客园博客,原文链接:http://www.cnblogs.com/hujunzheng/p/3973972.html,如需转载请自行联系原作者
目录
相关文章
|
5月前
|
机器学习/深度学习 存储 算法
回声状态网络(Echo State Networks,ESN)详细原理讲解及Python代码实现
本文详细介绍了回声状态网络(Echo State Networks, ESN)的基本概念、优点、缺点、储层计算范式,并提供了ESN的Python代码实现,包括不考虑和考虑超参数的两种ESN实现方式,以及使用ESN进行时间序列预测的示例。
254 4
回声状态网络(Echo State Networks,ESN)详细原理讲解及Python代码实现
|
网络虚拟化 芯片
TTL反相器、OC门、TS门、推挽输出、开漏输出
TTL反相器、OC门、TS门、推挽输出、开漏输出
189 0
TTL反相器、OC门、TS门、推挽输出、开漏输出
|
机器学习/深度学习 传感器 算法
基于TMP算法、S3PM算法、OTA算法、SAXA算法实现信号检测系统中四种噪声背景归一化附MATLAB代码
基于TMP算法、S3PM算法、OTA算法、SAXA算法实现信号检测系统中四种噪声背景归一化附MATLAB代码
ABB DSSR122 4899001-NK 可以产生更强的输出信号
ABB DSSR122 4899001-NK 可以产生更强的输出信号
ABB DSSR122 4899001-NK  可以产生更强的输出信号
|
人工智能
CF1556D. Take a Guess(交互 性质)
CF1556D. Take a Guess(交互 性质)
96 0
CF1556D. Take a Guess(交互 性质)
|
芯片
数电实验三 数据选择器及其应用 任务一:用74151芯片采用降维的方法实现F=ABC+ABD+ACD+BCD; 任务二:用74151芯片采用降维方式实现F=BCD反+BC反+A反D;
数电实验三 数据选择器及其应用 任务一:用74151芯片采用降维的方法实现F=ABC+ABD+ACD+BCD; 任务二:用74151芯片采用降维方式实现F=BCD反+BC反+A反D;
1099 0
数电实验三 数据选择器及其应用 任务一:用74151芯片采用降维的方法实现F=ABC+ABD+ACD+BCD; 任务二:用74151芯片采用降维方式实现F=BCD反+BC反+A反D;
|
JSON 数据格式 开发者
PUT 和 POST-更新Ⅱ之局部更新|学习笔记
快速学习 PUT 和 POST-更新Ⅱ之局部更新。
137 0
PTA 1006 Sign In and Sign Out (25 分)
At the beginning of every day, the first person who signs in the computer room will unlock the door, and the last one who signs out will lock the door.
105 0
CF1341C. Nastya and Strange Generator(思维 模拟 构造)
CF1341C. Nastya and Strange Generator(思维 模拟 构造)
93 0
|
JSON 数据格式 开发者
PUT 和 POST_更新Ⅱ之局部更新 | 学习笔记
快速学习 PUT 和 POST_更新Ⅱ之局部更新

热门文章

最新文章