What Are You Talking About HDU

Miku

字典树部分非常好解决,只要把最后每个单词结尾处记录下翻译成了啥

但是输出很麻烦,要处理空格,回车,换行和标点符号

不过有string在,还行

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<istream>
using namespace std;
int n;
string s;
struct t{
	int ne[28];
	int cnt;
}tr[400001];
int p;
int l;
int x;
int po;
void add(){
	//cout<<s<<" "<<l<<endl;
	p=0;
	for(int i=0;i<l;++i){
		x=s[i]-'a'+1;//这么干就不会有0了 
		if(!tr[p].ne[x]){//没有就建 
			po++;
			tr[p].ne[x]=po;		
		}
		p=tr[p].ne[x];
		tr[p].cnt++;//被经过次数即为前缀数 
	}
	return ;
}
int query(){
	p=0;
	for(int i=0;i<l;++i){
		x=s[i]-'a'+1;
		if(!tr[p].ne[x]){ 
			return 0;
		}else{
			p=tr[p].ne[x];
		}
	}
	return tr[p].cnt;
}

int main(){
	while(getline(cin,s)){
		l=s.length();
		if(l==0)
		break;
		add();
	}	
	while(getline(cin,s)){
		l=s.length();
		cout<<query()<<endl;;
	}
	return 0;
}

原文地址:https://www.cnblogs.com/For-Miku/p/13427633.html