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

简介: //暴力,从每一行的开始处开始寻找要查询的字符 #include #include #include #include using namespace std; char str[100005]; int main(){ while(gets(str)){ ...
//暴力,从每一行的开始处开始寻找要查询的字符
#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 }

 

目录
相关文章
|
网络协议 JavaScript 前端开发
netty 实现 websocket
netty 实现 websocket
344 1
|
物联网 Java 开发工具
如何编辑一个NFC的软件
如何编辑一个NFC的软件
475 1
|
存储 对象存储 UED
CDN适用哪些场景?
CDN是将源站内容分发至最接近用户的节点,使用户可就近取得所需内容,提高用户访问的响应速度和成功率。今天为大家分享几个CDN的典型适用场景。
16569 0
|
存储 弹性计算 安全
医保行业 | 智慧医保
本文介绍了医保行业 | 智慧医保的方案概述,方案价值及优势以及最佳实践。
医保行业 | 智慧医保
|
7月前
|
安全 Android开发 iOS开发
escrcpy:【技术党必看】Android开发,Escrcpy 让你无线投屏新体验!图形界面掌控 Android,30-120fps 超流畅!🔥
escrcpy 是一款基于 Scrcpy 的开源项目,使用 Electron 构建,提供图形化界面来显示和控制 Android 设备。它支持 USB 和 Wi-Fi 连接,帧率可达 30-120fps,延迟低至 35-70ms,启动迅速且画质清晰。escrcpy 拥有丰富的功能,包括自动化任务、多设备管理、反向网络共享、批量操作等,无需注册账号或广告干扰。适用于游戏直播、办公协作和教育演示等多种场景,是一款轻量级、高性能的 Android 控制工具。
482 1
|
文字识别 安全 算法
一键将PDF转换为AutoCAD格式
在线云库工具,能一键将PDF高效转换为AutoCAD(DWG)格式,支持OCR识别扫描版PDF,保证转换精度。工具匿名、安全,且免费无文件大小限制。适用于建筑、工程设计、图纸管理和教育场景,提升工作效率。
330 0
一键将PDF转换为AutoCAD格式
|
JavaScript Java 测试技术
基于微信小程序的校园二手交易平台的设计与实现(源码+lw+部署文档+讲解等)
基于微信小程序的校园二手交易平台的设计与实现(源码+lw+部署文档+讲解等)
429 0
|
人工智能 PyTorch 数据库
AI + Milvus:将时尚应用搭建进行到底
如何利用人工智能技术(例如开源 AI 向量数据库 Milvus 和 Hugging Face 模型)寻找与自己穿搭风格相似的明星。
352 0
|
消息中间件 存储 网络协议
谷粒商城----rabbitmq
谷粒商城----rabbitmq
|
Rust 安全 前端开发
还在考虑要不要加入Web3?Web3求职全攻略
还在考虑要不要加入Web3?Web3求职全攻略
1089 0