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;
}


//将要匹配的字符串(也就是题目中查询文本中出现的5个单词)建立trie树,然后生成AC_自动机.....
#include<iostream>
#include<cstring>
#include<queue>
#include<cstdio>
#include<algorithm>
using namespace std;

int trie[30][200];
int vis[30], fail[6000];//vis标记的是单词的末尾字符所在的节点
char str[][10] = {"Apple", "iPhone", "iPod", "iPad", "Sony"};
int cnt;
void buildT(){
    for(int i=0; i<5; ++i){
        int u=0;
        for(int j=0; str[i][j]; ++j){
            if(trie[u][str[i][j]] == 0)
                trie[u][str[i][j]] = ++cnt;
            u=trie[u][str[i][j]];
        }
        vis[u]=1;
    }
}

void getFail(){
    queue<int>q;
    for(int i=0; i<200; ++i)
        if(trie[0][i]) q.push(trie[0][i]);
    while(!q.empty()){
        int u = q.front();
        q.pop();
        int v;
        for(int i=0; i<200; ++i)
            if(v = trie[u][i]){
                fail[v] = trie[fail[u]][i];
                q.push(v);
            }
            else
                trie[u][i] = trie[fail[u]][i];
    }
}

void getText(char *ch){
    int u=0;
    for(int i=0; ch[i]; ++i){
        int v = trie[u][ch[i]];
        u=v;
        while(v){
            if(vis[v] && (ch[i]=='d' || ch[i]=='e'))
                printf("MAI MAI MAI!\n");
            else if(vis[v] && ch[i]=='y')
                printf("SONY DAFA IS GOOD!\n"); 
            v = fail[v];
        }
    }
}

char text[10000];

int main(){
    buildT();
    getFail();
    while(gets(text)){
        getText(text);
    }
    return 0;
}
目录
相关文章
|
1月前
|
机器学习/深度学习 存储 算法
回声状态网络(Echo State Networks,ESN)详细原理讲解及Python代码实现
本文详细介绍了回声状态网络(Echo State Networks, ESN)的基本概念、优点、缺点、储层计算范式,并提供了ESN的Python代码实现,包括不考虑和考虑超参数的两种ESN实现方式,以及使用ESN进行时间序列预测的示例。
61 4
回声状态网络(Echo State Networks,ESN)详细原理讲解及Python代码实现
|
1月前
|
算法
【算法】模拟算法——替换所有的问号(easy)
【算法】模拟算法——替换所有的问号(easy)
Shortest Path with Obstacle( CodeForces - 1547A )(模拟)
Shortest Path with Obstacle( CodeForces - 1547A )(模拟)
39 0
|
文件存储
Easy Number Challenge(埃式筛思想+优雅暴力)
Easy Number Challenge(埃式筛思想+优雅暴力)
76 0
|
Go
【力扣】1620. 网络信号最好的坐标 (Go 遍历)
【力扣】1620. 网络信号最好的坐标 (Go 遍历)
76 0
|
人工智能
CF1556D. Take a Guess(交互 性质)
CF1556D. Take a Guess(交互 性质)
81 0
CF1556D. Take a Guess(交互 性质)
PTA 1043 输出PATest (20 分)
给定一个长度不超过 10 4 的、仅由英文字母构成的字符串。请将字符重新调整顺序,按 PATestPATest.... 这样的顺序输出,并忽略其它字符。
71 0
CF1341C. Nastya and Strange Generator(思维 模拟 构造)
CF1341C. Nastya and Strange Generator(思维 模拟 构造)
76 0
|
人工智能 BI
CF1398C. Good Subarrays(思维 前缀和)
CF1398C. Good Subarrays(思维 前缀和)
96 0