HDU1251(统计难题)
2016-06-12 10:02
357 查看
题目链接:传送门
题目大意:中文题(大意略)
题目思路:tire入门题
用数组代替指针模拟字典树(代码易写,速度快)
题目大意:中文题(大意略)
题目思路:tire入门题
用数组代替指针模拟字典树(代码易写,速度快)
#include <iostream> #include <cstdio> #include <cstdlib> #include <cmath> #include <algorithm> #include <cstring> #include <stack> #include <cctype> #include <queue> #include <string> #include <vector> #include <set> #include <map> #include <climits> #define lson root<<1,l,mid #define rson root<<1|1,mid+1,r #define fi first #define se second #define ping(x,y) ((x-y)*(x-y)) #define mst(x,y) memset(x,y,sizeof(x)) #define mcp(x,y) memcpy(x,y,sizeof(y)) using namespace std; #define gamma 0.5772156649015328606065120 #define MOD 1000000007 #define inf 0x3f3f3f3f #define N 50005 #define maxn 400005 typedef pair<int,int> PII; char s[111]; struct Trie{ int ch[maxn][26],alloc; ///alloc是节点变量,为节点之间建立联系 int val[maxn],cur; ///cur是当前正在访问的节点 int i,len; void clc(){ ///字典树初始化操作 cur=0; alloc=1; mst(val,0); mst(ch,-1); } void add(){ ///扩充节点(向树里增加新节点) for(;i<len;++i){ ch[cur][s[i]-'a']=alloc++; cur=ch[cur][s[i]-'a']; ++val[cur]; } } void ins(){ ///扩充节点的值(扩充已有节点的值) len=strlen(s); cur=0; for(i=0;i<len;++i){ if(ch[cur][s[i]-'a']==-1) add(); else{ cur=ch[cur][s[i]-'a']; ++val[cur]; } } } int query(){ ///询问 len=strlen(s); cur=0; for(i=0;i<len;++i){ if(ch[cur][s[i]-'a']==-1)return 0; cur=ch[cur][s[i]-'a']; } return val[cur]; } }trie; int main(){ int i,j,group; trie.clc(); //freopen("in.txt","r",stdin); while(gets(s)&&strlen(s)) trie.ins(); while(gets(s)&&strlen(s)){ printf("%d\n",trie.query()); } return 0; }
相关文章推荐
- mavenjar 一些拉取不下来问题
- 使用谷歌身份验证器增强SSH安全
- Alpha-Beta搜索
- 单例模式的用处
- AOP(面向切面编程 Aspect Oriented Programming)
- Ubuntu 16.04安装Matplotlib
- C#由变量捕获引起对闭包
- iOS平台下cookie的使用
- android开发中遇到的一些灵异事件(更新中...)
- eclipse启动tomcat不加载项目
- 前端代码覆盖率工具istanbul
- java学习:java编程常用方法
- Bootstrap辅助类
- 链接形式的QQ分享和微博分享页面代码
- Linux下中文文件名乱码问题的详解
- moment常用操作
- 漫谈QML
- 修改iptables防火墙规则解决vsftp登录后不显示文件目录的问题
- Caffe 深度学习框架及AlexNet结构
- Android中GPRS定位的实现