uestc Caruta (字典树)
来源:互联网 发布:植物名称查询软件 编辑:程序博客网 时间:2024/06/06 14:53
暂无链接
唉,还是当时太紧张了,这么一水题当时嗯是没敲对,下来直接1A了,泪奔啊
字典树方法:插入的时候每个节点遇到一次便+1,查询的时候每遇到一个节点便-1,如果该节点值==0则不必再往下查询了,最后一个字符串不用查询
#include<cstdio>#include<cstring>#define MAXN 100005struct node{int ch[MAXN][26],val[MAXN];int sz;void ini(){sz=1;memset(ch[0],0,sizeof(ch[0]));}int idx(char c){return c-'a';}void insert(char *s){int pre=0,len=strlen(s);for(int i=0;i<len;i++){int next=idx(s[i]);if(!ch[pre][next]){memset(ch[sz],0,sizeof(ch[sz]));val[sz]=0;ch[pre][next]=sz++;}val[ch[pre][next]]++;pre=ch[pre][next];}}int cnt;void query(char *s){cnt=0;int pre=0,len=strlen(s);for(int i=0;i<len;i++){int next=idx(s[i]);cnt++;val[ch[pre][next]]--;if(val[ch[pre][next]]==0)return ;pre=ch[pre][next];}}};char s[1000][MAXN];//如果数据有10^5个长度为1的字符串就不行了,可以用vector,map之类的node a;int main(){int n,ans,i;while(scanf("%d",&n)!=EOF){ans=0;a.ini();for(i=0;i<n;i++){scanf("%s",s[i]);a.insert(s[i]);}for(i=0;i<n-1;i++){a.query(s[i]);ans+=a.cnt;}printf("%.6lf\n",ans*1.0);}return 0;}
0 0
- uestc Caruta (字典树)
- UESTC 1060 字典树
- UESTC 1060 秋实大哥与快餐店(字典树)
- UESTC 1582 奇迹的魔法啊,再度出现! 二进制树(字典树的一种特殊情况)
- 2016 UESTC Training for Search Algorithm & String H - 中二少女与字符串 Trie 字典树
- UESTC 482 Charitable Exchange (线段树)
- UESTC 1425(线段树)
- UESTC 1324线段树
- UESTC--1251(模拟)
- UESTC
- UESTC
- UESTC
- UESTC
- UESTC
- UESTC
- UESTC
- UESTC
- UESTC
- 选择毛利率较高的项目
- 【算法-查找之一】顺序查找
- ubuntu java6 jdk error
- java-JDBC插入Clob字段
- openmax_il
- uestc Caruta (字典树)
- 【Android】Android自动开关机实现
- RTL芯片识别
- 简单博弈(hdu 2188 && 4764 && 2149 && 3863 && 3951 && 1564)
- 编码UNICODE,GBK,UTF-8区别
- nyist 290 动物统计加强版(字典树)
- 爱立信面试前的GitHub项目如何上传
- cbClsExtra GetClassInfo或GetClassInfoEx可以获取WNDCLASS或者WNDCLASSEX结构
- 运用UITextFieldDelegate完成,点击键盘的右下角的next,光标进入下一文本框,然后再点击Done,收回键盘