计蒜客---糟糕的Bug(Trie树)
来源:互联网 发布:php 反射api 编辑:程序博客网 时间:2024/06/05 03:07
蒜头君作为蒜厂的工程师,在开发网站时不小心写出了一个 Bug:当用户输入密码时,如果既和自己的密码一致,也同时是另一个用户密码的 前缀 时,用户会跳转到 404 页。
然而蒜头君坚称:我们的用户那么少,怎么可能触发这个 Bug……
机智的你,能不能帮蒜头君确认一下这个 Bug到底会不会触发呢?
样例输入
第一行输入一个整数 n(1 \leq n \leq 233333)n(1≤n≤233333),表示蒜厂网站的用户数。接下来一共 nn 行,每行一个由小写字母a-z
组成的字符串,长度不超过 1010,表示每个用户的密码。蒜厂的数据库容量太小,所有密码长度加起来小于 466666466666。
样例输出
如果触发了 Bug 则输出一行Bug!
,否则输出一行Good Luck!
。
样例输入1
3
abc
abcdef
cdef
样例输出1
Bug!
样例输入2
3
abc
bcd
cde
样例输出2
Good Luck!
思路:可以建个数组枚举,效率太低。可以运用trie树(字典树)。关键在于题目中加重的前缀两字,怎么判断。。
详细代码:
#include<iostream>
#include<cstring>
using namespace std;
const int maxn=500000;
const int maxc=26;
int *ch[maxn],tol,cnt[maxn];
void init(){
tol=0;
memset(ch,0,sizeof(ch));
memset(cnt,0,sizeof(cnt));
}
bool insert(char *str,int size){
int p=0,x=0;
for(int i=0;str[i];i++){
if(ch[p]==NULL){
ch[p]= new int[maxc];
memset(ch[p],-1,sizeof(int)*maxc);
}if(ch[p][str[i]-'a']==-1){
ch[p][str[i]-'a']=++tol;
}else x++;
p=ch[p][str[i]-'a'];
//cout<<a1<<" "<<i+1<<endl;
if(cnt[p]||(x==size))return false; //判断前缀的关键语句。
}
cnt[p]++;
//cout<<x;
return true;
}
int main(){
int n;
init();
cin>>n;
for(int i=0;i<n;i++){
char s[15];
cin>>s;
//cout<<strlen(s)<<endl;
if(!insert(s,strlen(s))){
cout<<"Bug!\n";
return 0;
}
}
cout<<"Good Luck!\n";
}
- 计蒜客---糟糕的Bug(Trie树)
- 10个糟糕的IE Bug及其修复
- 10个糟糕的IE Bug及其修复
- 10个糟糕的IE Bug及其修复(2)
- 10个糟糕的IE Bug及其修复 [3]
- Trie树与Trie图的学习
- 一般的trie树
- Trie树的实现
- trie树的模板
- Trie树的实现
- Trie树的构建
- Trie树的构建
- Trie 树的操作
- Trie树的应用
- Trie树的学习
- trie树的了解
- 糟糕的情绪;糟糕的火箭
- 糟糕的开始并不会糟糕结束
- 字符串 String 用法 —— 进阶篇
- jq.ajax+php+mysql数据库实现用户无刷新评论
- hadoop 节点SSH免密登录设置
- mysql “error LNK2019: 无法解析的外部符号”的几种可能原因
- 第二大的数
- 计蒜客---糟糕的Bug(Trie树)
- Maven+SpringMVC+Spring+MyBatis连接MySQL数据库详细搭建整合过程
- 狗种类识别
- Angular 路由 过滤 实行简单分页
- java匿名内部类
- (三)TensorFlow实现神经网络
- python模块之re与正则
- CSS3 calc()属性的使用
- EmEditor Professional (文本编辑器) 官方破解版64位V17.3.1下载 | 含emeditor注册码