POJ3630 Phone List 题解&代码
2016-02-29 18:57
405 查看
第一次用vim写代码…感觉爽爽哒,终于明白很多代码为什么会有诡异的空格什么的…习惯
vim的快捷操作几乎全部是和单词相关,也就是说如果一句代码中间没有空格…vim的优势就完全消失了
在下的习惯一时半会改不过来…嘛,不过既然看到了其道理自然是要努力改的
裸的trie树,最后加上一遍dfs,dfs检验是不是有一条路径上同时有两个单词结尾,如果有输出NO,反之则反
vim的快捷操作几乎全部是和单词相关,也就是说如果一句代码中间没有空格…vim的优势就完全消失了
在下的习惯一时半会改不过来…嘛,不过既然看到了其道理自然是要努力改的
裸的trie树,最后加上一遍dfs,dfs检验是不是有一条路径上同时有两个单词结尾,如果有输出NO,反之则反
#include<iostream> #include<cstdio> #include<cstring> using namespace std; const int maxl=100005; int T,n,tot,ch[maxl][20],flag[maxl],Flag; char s[20]; int newnode(int x,int temp) { if(temp!=-1)ch[x][temp]=++tot; for(int i=0;i<10;i++)ch[tot][i]=0; flag[tot]=0; } void Insert(int len) { int x=0,p=0,temp; while(p<len) { temp=s[p]-'0'; if(!ch[x][temp])newnode(x,temp); x=ch[x][temp]; p++; } flag[x]=1; } void dfs(int x) { if(Flag)return; if(flag[x]>1)Flag=true; for(int i=0;i<10;i++) if(ch[x][i]) flag[ch[x][i]]+=flag[x],dfs(ch[x][i]); } int main(void) { scanf("%d",&T); while(T--) { Flag=false; tot=0; newnode(0,-1); scanf("%d",&n); for(int i=0;i<n;i++) { scanf("%s",s); Insert(strlen(s)); } dfs(0); if(Flag)printf("NO\n"); else printf("YES\n"); } return 0; }
相关文章推荐
- python入门
- bean的初始化过程和对应源代码
- PHP 删除数组第一个元素和最后一个元素
- python中的lambda表达
- java中的list、set与map
- vsftpd的配置
- setInterval() 使用注意的地方
- Visual Studio2012 Lua插件--BabeLua
- Java BIO、NIO、AIO 学习
- 我读Mongoose源码----程序框架
- 解决Myeclipse 8.5上新建的项目无法在Eclipse上运行的办法
- Eclipse输入Java和XML代码自动提示功能最简单的方法
- python学习笔记七 初识socket(进阶篇)
- Java工程师成神之路~
- Java解决高精度计算问题
- php处理json数据(从服务器获取,post提交)
- 【慕课笔记】第六章 JAVA中的集合框架(下) 第3节 学生选课——获取List中课程的位置
- Spring注解详解
- Spring Boot 连接MySql数据库
- 快速排序算法剖析