HDU1671 字典树
2016-07-19 19:53
211 查看
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1671
大致题意:T组询问,每组给出n个号码,如果该组中出现以其他串为前缀的串就输出“NO",否则输出”YES"。
思路:字典树模板
大致题意: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; }
相关文章推荐
- 深入浅出spring IOC中三种依赖注入方式
- Android取消EditText自动获取焦点默认行为
- HDU 2546 饭卡
- Spring——IOC/DI理解
- Android Studio IDE的 LogCat如何过滤指定应用的调试信息
- 如何在VMware8虚拟机里安装Xp GHOST系统 解决不能启动Xp系统方法
- POJ 2533 Longest Ordered Subsequence
- hdu 1495 非常可乐
- 如何烧写Bubblegum-96 board
- 面试题42:翻转单词顺序
- UVA 10970-Big Chocolate
- 2016 Multi-University Training Contest 1
- js中eval() 方法的使用以及一些特殊的使用方式
- hdu1715(Java)大数相加
- SDUTOJ 1294选票统计
- linux网卡报错设置
- Citrix XenDesktop如何发布LocalApp
- 敏捷开发之Scrum扫盲,及敏捷开发中XP与SCRUM的区别
- 敏捷开发之Scrum扫盲,及敏捷开发中XP与SCRUM的区别
- 简单总结Unity使用Resources类资源管理