hdu1671 字典树
来源:互联网 发布:张国荣过誉 知乎 编辑:程序博客网 时间:2024/05/17 06:27
做法很多,map,hash,字典树都行。
大致题意:判断是否有存在数字是其他数字的前缀。写字典树要注意释放内存,不然会MLE
AC代码:
#include<cstdio>#include<cstring>#include<string>#include<iostream>using namespace std;const int maxn=1e4+5;const int Max=10;char s[maxn][11];struct node{node* next[Max];int v;node(){for(int i=0;i<Max;++i) next[i]=NULL;v=-1;}}*root;void init(){ //建立根结点 root=new node();}void insert(char *ch){int n=strlen(ch);//printf("length=%d\n",n);node *p=root,*q;for(int i=0;i<n;++i){int c=ch[i]-'0';if(p->next[c]==NULL){q=new node();q->v=1;p->next[c]=q;p=p->next[c];}else {p->next[c]->v++;p=p->next[c];}}}int find(char *ch){int ans;node *p=root;int n=strlen(ch); for(int i=0;i<n;++i){int c=ch[i]-'0';if(p->next[c]==NULL) return 0;p=p->next[c];ans=p->v;}return ans;}void free_tree(node *u){for(int i=0;i<Max;++i){if(u->next[i]==NULL) continue;else free_tree(u->next[i]);}delete u;}int main(){int T;scanf("%d",&T);while(T--){init();int n;scanf("%d",&n);for(int i=0;i<n;++i){scanf("%s",s[i]);insert(s[i]);}int flag=1,ans;for(int i=0;i<n;++i){if((ans=find(s[i]))>1) {//printf("%d\n",ans); flag=0;break;}}if(flag) printf("YES\n");else printf("NO\n");free_tree(root);}return 0;}
如有不当之处欢迎指出!
0 0
- HDU1671字典树
- hdu1671之字典树
- hdu1671( 字典树)
- hdu1671 字典树 入门
- 字典树HDU1671
- hdu1671 字典树
- 字典树(hdu1671)
- HDU1671 字典树
- HDU1671(字典树)
- hdu1671 字典树
- HDU1671 字典树
- 【字典树】 hdu1671 Phone List
- hdu1671字典树+动态分配内存
- Phone List(hdu1671字典树)
- hdu1671字典树入门题
- hdu1671 Phone List (字典树)
- hdu1671 PhoneList (字典树)
- HDU1671 Phone List【字典树】
- PHP仿微信多图片预览上传功能
- Go指南练习之《Web 爬虫》
- Redis持久化
- C++学习笔记之运行时刻类型识别RTTI
- HttpClient传值
- hdu1671 字典树
- POJ 2187Beauty Contest(凸包)
- 索引
- Swift函数学习
- js之闭包
- text-fill-color加text-stroke实现页面艺术字
- C++——字符串处理题——万能遥控器
- eclipse调用JNI之环境的搭建
- c/c++程序main函数参数解析,以及参数传递的不同方法