问题描述

有一个有趣的定理:无限猴子定理(infinite monkey theorem),它的表述如下:让一只猴子在打字机上随机按键,当按键次数达到无穷时,几乎必然能够打出任何给定的文字。
给出一篇猴子打出的“文章”,并给定一个由若干个词组成的词典,问猴子一共打出了多少个在词典中出现的词。
输入格式
第一行一个整数 n(1≤n≤10000),表示词典中单词的个数。
接下来 n 行,每行一个仅由小写字母组成的单词,长度不超过 50。
最后一行是一篇仅由小写字母组成的文章,长度不超过 1000000。
输出格式
一行一个整数,表示答案。
样例输入
5
jsk
jisuan
suantou
love
program
jisuantouisprogramming
样例输出
3


AC代码

#include<iostream>
#include<cstring>
#include<cstdio>
#define maxn 1000005
#define maxm 1000005
using namespace std;
int n,tot,head,tail,son[maxm][26],fai[maxm],sum[maxm],list[maxm];
char s[maxn];
void clear(){tot=0;memset(son,0,sizeof(son));memset(sum,0,sizeof(sum));}void insert(char *s){int p=0;for (int i=1;s[i];p=son[p][s[i]-'a'],i++) if (!son[p][s[i]-'a']) son[p][s[i]-'a']=++tot;sum[p]++;}void failed(){head=0,tail=1,list[1]=0,fai[0]=-1;while (head!=tail){int x=list[++head];for (int ch=0;ch<26;ch++)if (son[x][ch]){list[++tail]=son[x][ch];int p=fai[x];while (p!=-1&&!son[p][ch]) p=fai[p];if (p==-1) fai[son[x][ch]]=0;else fai[son[x][ch]]=son[p][ch];}   }}void work(char *s){int ans=0;for (int i=1,p=0;s[i];i++){while (p&&!son[p][s[i]-'a']) p=fai[p];p=son[p][s[i]-'a'];for (int t=p;t;t=fai[t]) ans+=sum[t],sum[t]=0;}printf("%d\n",ans);}
int main()
{cin>>n;for (int i=1;i<=n;i++) scanf("%s",s+1),insert(s);failed();scanf("%s",s+1),work(s);return 0;
}

计蒜客习题:猴子打字相关推荐

  1. 计蒜客习题:蒜厂年会

    问题描述 蒜厂要开年会了,所有的员工都要参加. 每两个员工之间都有一个亲密度.在同一个项目工作过的员工之间的亲密度为 1.如果 A 和 B.B 和 C 均在同一个项目中工作过,而 A 和 C 没有,那 ...

  2. 计蒜客习题:幼儿园买玩具

    问题描述 蒜厂幼儿园有 n 个小朋友,每个小朋友都有自己想玩的玩具.身为幼儿园园长的你决定给幼儿园买一批玩具,由于经费有限,你只能买 m 个玩具.已知玩具商店一共卖 k 种玩具,编号为 1,2,3,- ...

  3. 计蒜客习题:新年礼物

    问题描述 新年了,蒜厂 BOSS 要给小蒜头们发新年礼物,其中有一份神秘大奖,但却不知道应该发给谁.于是,蒜厂 BOSS 打算让大家玩一个游戏. 一共有 n 个字符串排成一排,蒜头需要从中按顺序选取一 ...

  4. 【计蒜客习题】消除字符串

    问题描述 蒜头君喜欢中心对称的字符串,即回文字符串.现在蒜头君手里有一个字符串 SS,蒜头君每次都会进行这样的操作:从 SS 中挑选一个回文的子序列,将其从字符串 SS 中去除,剩下的字符重组成新的字 ...

  5. 计蒜客习题:恋爱纪念日(C语言)

    蒜头君和花椰妹谈恋爱啦.祝福他们吧. 蒜头君想知道第他们的第 100100 天,200200 天 ... 纪念日.输入格式输入 44 个整数 y,m,d,ky,m,d,k,表示他们在一起的日期,保证是 ...

  6. 计蒜客习题:迷阵突围

    问题描述 蒜头君陷入了坐标系上的一个迷阵,迷阵上有 n 个点,编号从 1 到 n.蒜头君在编号为 1 的位置,他想到编号为 n 的位置上.蒜头君当然想尽快到达目的地,但是他觉得最短的路径可能有风险,所 ...

  7. 计蒜客习题:骑车比赛

    问题描述 蒜头君准备去参加骑车比赛,比赛在 n 个城市间进行,编号从 1 到 n.选手们都从城市 1 出发,终点在城市 n. 已知城市间有 m 条道路,每条道路连接两个城市,注意道路是双向的.现在蒜头 ...

  8. 计蒜客习题:帕吉的肉钩

    问题描述 在 DotA 游戏中,帕吉的肉钩是很多英雄最害怕的东西.钩子由连续若干段的等长金属棒制成. 现在帕吉对钩子由一些操作: 我们将金属棒 1~n 依次编号,帕吉可以把编号 x~y 的金属棒变成铜 ...

  9. 计蒜客习题:修建大桥

    问题描述 蒜头君来到一个由 n 个小岛组成的世界,岛与岛之间通过修建桥,来让岛上的居民可以去其他的小岛.已知已经修建了 m 座桥,居民们想让蒜头君帮忙计算,最少还要在修建几座桥,居民们才能去所有的岛. ...

  10. 【二分法】计蒜客习题 切割钢管

    思路: 切割刚拐和洛谷木材加工一样,在一个区间内找最大值(整数).二分答案+check #include <iostream> using namespace std; int n,k; ...

最新文章

  1. 游客功能怎么实现 php,php链式操作的实现方式分析
  2. navicat 导入csv未响应_使用navicat将csv文件导入mysql
  3. SAP 供应商寄售业务的标准流程
  4. 二十二、statsmodels库的使用
  5. Ubuntu14.04系统下安装配置OpenCV 4.0.0开发环境全过程
  6. Drawing绘图halcon算子,持续更新
  7. 矩阵维度必须一致_如何从看得懂到会使用矩阵思维
  8. 【拨云见日】企业上云时代,多样化的公有云服务你了解多少?
  9. 混合牛奶(洛谷-P1208)
  10. Html5新增表单属性
  11. 读取 Excel 之 Epplus
  12. 微信小程序设置用户收货地址
  13. 奇迹mu 服务器状态,奇迹mu服务端的架设
  14. 信息学奥赛c++ 初学保姆级教程
  15. matlab中带脚咪头怎么找,咪头用万能表怎么测_咪头怎么辨认正负极
  16. spring quartz 表达式在线生成器
  17. AUTOCAD--动态缩放
  18. 解读WPF中的Binding
  19. C++静态库和动态库的导入导出
  20. 世界杯期间怎么做营销活动?

热门文章

  1. Linux下部署worldPress
  2. 免费云笔记软件哪个好?
  3. android侧滑菜单 动画,Android 打造完美的侧滑菜单/侧滑View控件
  4. Compose 实现页面侧滑返回
  5. 用java JFrame,JPanel写的大鱼吃小鱼小游戏
  6. python项目实战:免费下载某平台任意付费音乐
  7. 云中马在A股上市:总市值约为40亿元,叶福忠为实际控制人
  8. 虚拟机服务器都使用的机械硬盘吗,云服务器 有机械硬盘吗
  9. 虚拟机快照、迁移、删除
  10. android金钱符号变形,使用¥(一个中文字宽)还是¥(半个中文字宽)?