2014 网选 5007 Post Robot(暴力或者AC_自动机(有点小题大作了))
//暴力,从每一行的开始处开始寻找要查询的字符
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std; char str[]; int main(){
while(gets(str)){
for(int i=; 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 ;
}
//将要匹配的字符串(也就是题目中查询文本中出现的5个单词)建立trie树,然后生成AC_自动机.....
#include<iostream>
#include<cstring>
#include<queue>
#include<cstdio>
#include<algorithm>
using namespace std; int trie[][];
int vis[], fail[];//vis标记的是单词的末尾字符所在的节点
char str[][] = {"Apple", "iPhone", "iPod", "iPad", "Sony"};
int cnt;
void buildT(){
for(int i=; i<; ++i){
int u=;
for(int j=; str[i][j]; ++j){
if(trie[u][str[i][j]] == )
trie[u][str[i][j]] = ++cnt;
u=trie[u][str[i][j]];
}
vis[u]=;
}
} void getFail(){
queue<int>q;
for(int i=; i<; ++i)
if(trie[][i]) q.push(trie[][i]);
while(!q.empty()){
int u = q.front();
q.pop();
int v;
for(int i=; i<; ++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=;
for(int i=; 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[]; int main(){
buildT();
getFail();
while(gets(text)){
getText(text);
}
return ;
}
2014 网选 5007 Post Robot(暴力或者AC_自动机(有点小题大作了))的更多相关文章
- 2014 网选 上海赛区 hdu 5047 Sawtooth
题意:求n个'M'型的折线将一个平面分成的最多的面数! 思路:我们都知道n条直线将一个平面分成的最多平面数是 An = An-1 + n+1 也就是f(n) = (n*n + n +2)/2 对于一个 ...
- 2014 网选 5024 Wang Xifeng's Little Plot
题意:从任意一个任意一个可走的点开始找一个最长的路,这条路如果有转弯的话, 那么必须是 90度,或者没有转弯! 思路: 首先用dfs将所有可走点开始的 8 个方向上的线段的最长长度求出来 ! step ...
- 2014 网选 广州赛区 hdu 5025 Saving Tang Monk(bfs+四维数组记录状态)
/* 这是我做过的一道新类型的搜索题!从来没想过用四维数组记录状态! 以前做过的都是用二维的!自己的四维还是太狭隘了..... 题意:悟空救师傅 ! 在救师父之前要先把所有的钥匙找到! 每种钥匙有 k ...
- 2014 网选 广州赛区 hdu 5023 A Corrupt Mayor's Performance Art
#include<iostream> #include<cstring> #include<cstdio> #include<algorithm> #d ...
- 2014 网选 5011 Game(Nim游戏,数学题)
/* 题意:Nim游戏! 思路:通过异或,判断将n个数表示成二进制的形式之后,是否对应位的数字1 的个数是偶数! */ #include<iostream> using namespace ...
- 2014 网选 5012 Dice(bfs模板)
/* 题意:就是给定两个筛子,每个筛子上6个面,每个面的数字属于[1,6], 且互不相同! 问a筛子最少经过按照题目规定的要求转动,达到和b筛子上下左右前后的数字相同! 思路:很直白的bfs,将每一种 ...
- 2014 网选 5014 Number Sequence(异或)
/* 题意:a, b两个序列,规定由[0, n]区间的数! 求 a[i] ^ b[i] 的和最大! 思路:如果数字 n的二进制有x位, 那么一定存在一个数字m,使得n^m的所有二进制位 都是1,也就是 ...
- BUPT复试专题—网络传输(2014网研)
题目描述 网络的高效互联与智能传输是提升海量用户服务请求映射效率的重要措施.在这个任务中,你需耍在最小的传输时间内,将数据源传输到指定的网络节点中.我们给定的网络一共包含N个节点,其中节点1为数据源. ...
- BUPT复试专题—进程管理(2014网研)
题目描述 在操作系统中,进程管理是非常重要的工作.每个进程都有唯一的进程标识PID.每个进程都可以启动子进程,此时我们称该它本身是其子进程的父进程.除PID为0的进程之外,每个进程冇且只冇一个父进程. ...
随机推荐
- Leetcode 290 Word Pattern STL
Leetcode 205 Isomorphic Strings的进阶版 这次是词组字符串和匹配字符串相比较是否一致 请使用map来完成模式统计 class Solution { public: boo ...
- Leetcode 202 Happy Number 弗洛伊德判环解循环
今天先谈下弗洛伊德判环,弗洛伊德判环原来是在一个圈内有两人跑步,同时起跑,一人的速度是另一人的两倍,则那个人能在下一圈追上另一个人,弗洛伊德判环能解数字会循环出现的题,比如说判断一个链表是不是循环链表 ...
- iOS10之后openURL:方法过期之后的替代方法及使用
目前苹果为iOS10开放了一个key:UIApplicationOpenURLOptionUniversalLinksOnly但亲测无效 目前使用的是这个key:UIApplicationOpenUR ...
- spring源码 — 三、AOP代理生成
AOP代理生成 AOP就是面向切面编程,主要作用就是抽取公共代码,无侵入的增强现有类的功能.从一个简单的spring AOP配置开始: <?xml version="1.0" ...
- jquery导航栏html页面跳转导航字体变色
html代码: <div class="collapse"> <ul class="nav"> <li><a href ...
- Top 20 Java Libries Used by Github's Most Popular Java Projects
Top 20 Java Libries Used by Github's Most Popular Java Projects:
- 汇编语言学习笔记(5)——[bx]和loop
1.[bx]代表将bx寄存器中的值作为偏移地址. 2.loop与循环有关 3.inc bx的含义为bx中的内容+1 4.loop指令的格式为: loop 标号 CPU运行loop指令的时候.要进行两步 ...
- 如何通过Socket TCP发送并接收一个文件?
一.小结 1.大包发小包收,只发一次. 2.发时把文件扩展名,文件长度也随同一起发送,方便接收端接收时另存为正确的文件类型,并判断是否已经接收完毕. 如果不一起发送,分为文件扩展名,文件长度,文件内容 ...
- AYUI快速开发2016-6-29 ,全部免费,WPF普遍之路梦想开启
下载开发模板:下载 AYUI 6月29日起,免费使用,无需授权,去除所有限制,关爱开发者,不求捐赠,只要你们能私活挣到钱就行,你们没有欠我的.我希望所有人都能开发WPF的东西 使用教程,上面的下载文件 ...
- PHP 数组排序方法总结
sort:本函数为 array 中的单元赋予新的键名.这将删除原有的键名而不仅是重新排序. rsort:本函数对数组进行逆向排序(最高到最低). 删除原有的键名而不仅是重新排序. asort:对数组进 ...