UVA 12526 Cellphone Typing (字典树)
tags: acm
模板题,虽然之前没去学,但是还是在比赛的时候现学现卖搞定了,算是我写的第一道字典树吧.
题意:
给你一个字典,包含许多单词.每当你按一个键时,系统会将其补全为所有以当前内容为前缀的单词的公共前缀.
如第一个样例,字典中的词为”hell”,”hello”,”heaven”,”goodbye”四个单词.
当你输入’h’时,系统将为你补全为”hell”,”hello”及”heaven”的公共前缀”he”,再输入’l’,继续补全为”hell”从而完成了”hell”的输入,你按了两次键(‘h’和’l’).
求输入字典中的单词所需要的次数的期望.
解析:
因为每次输入都会使得当前输入接近目标单词,因此这道题相当于统计字典中的单词在字典树中经过的的分叉数(每个分叉需要通过输入来确定到底是哪个单词),求和后除以单词书就能得到所求的期望,需要注意的是单词结尾也算是一个分叉.
代码:
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <queue>
#define MAXN 1000000+10000
using namespace