HDU1671 字典树
来源:互联网 发布:北京云杉网络 编辑:程序博客网 时间:2024/05/16 15:30
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1671
大致题意:T组询问,每组给出n个号码,如果该组中出现以其他串为前缀的串就输出“NO",否则输出”YES"。
思路:字典树模板
#include<iostream>#include<cstring>#include<cstdio>using namespace std;char str[10005];int n;struct Trie{ bool flag; Trie *nxt[10]; void init() { for (int i=0;i<10;i++) this->nxt[i] = NULL; flag = false; }};bool ist(Trie *root, char *s){ bool flag = false; Trie *p,*q; p = root; int len = strlen(s); for (int i=0;i<len;i++) { int id = s[i]-'0'; if (p->nxt[id]==NULL) { q = new Trie; q->init(); p->nxt[id] = q; } else { if (p->nxt[id]->flag==true) flag = true; } p = p->nxt[id]; } p->flag = true; return flag;}bool Search(Trie *root, char *s){ Trie *p; p = root; int len = strlen(s); for (int i=0;i<len;i++) { int id = s[i]-'0'; if (p->nxt[id]==NULL) return false; p = p->nxt[id]; } return true;}void del(Trie *root){ for (int i=0;i<10;i++) { if (root->nxt[i]!=NULL) del(root->nxt[i]); } delete(root);}int main(){ int T; scanf("%d",&T); while (T--) { Trie *root = new Trie; root->init(); bool flag = true; scanf("%d",&n); for (int i=0;i<n;i++) { scanf("%s",str); if (Search(root,str)==true) flag = false; if (ist(root,str)) flag = false; } if (flag) puts("YES"); else puts("NO"); del(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【字典树】
- C# 重启计算机的问题
- 使用Reveal调试UI
- MAC彻底删除软件
- UVA 568-Just the Facts
- MYSQL之连接查询
- HDU1671 字典树
- 80. Remove Duplicates from Sorted Array II
- gdbus移植至mips
- c/c++中错误的处理
- UVA 550-Multiplying by Rotation
- POJ 3264Balanced Lineup
- 锚点、侧栏滑动出现
- 回归分析
- UVA 10110-Light, more light