电话号码

来源:互联网 发布:淘宝卖家刷一单10元 编辑:程序博客网 时间:2024/05/15 23:53

9:电话号码

  • 查看
  • 提交
  • 统计
  • 提问
总时间限制: 
1000ms 
内存限制: 
65536kB
描述

给你一些电话号码,请判断它们是否是一致的,即是否有某个电话是另一个电话的前缀。比如:

Emergency 911
Alice 97 625 999
Bob 91 12 54 26

在这个例子中,我们不可能拨通Bob的电话,因为Emergency的电话是它的前缀,当拨打Bob的电话时会先接通Emergency,所以这些电话号码不是一致的。

输入
第一行是一个整数t,1 ≤ t ≤ 40,表示测试数据的数目。
每个测试样例的第一行是一个整数n,1 ≤ n ≤ 10000,其后n行每行是一个不超过10位的电话号码。
输出
对于每个测试数据,如果是一致的输出“YES”,如果不是输出“NO”。
样例输入
2391197625999911254265113123401234401234598346
样例输出
NOYES
    #include<iostream>#include<cmath>#include<cstring>#include<algorithm>#include<iomanip>#include<queue>#include<stack>#include<vector>#include<set>#include<map>using namespace std;bool flag;struct Node{Node*Child[10];bool flag;Node(){flag=false;memset(Child,0,sizeof(Child));}};int main(){int Test;cin>>Test;while(Test--) {int n;string s;flag=false;cin>>n;Node *root=new Node();while(n--){cin>>s;if(flag)continue;int len=s.length();Node*p=root;for(int i=0;i<len;++i){if(i==len-1&&p->Child[s[i]-'0']!=NULL){flag=true;break;}if(p->Child[s[i]-'0']==NULL){p->Child[s[i]-'0']=new Node();}p=p->Child[s[i]-'0'];if(p->flag){flag=true;break;}}if(!flag)p->flag=true;}if(flag)cout<<"NO"<<endl;else cout<<"YES"<<endl;}return 0;}


原创粉丝点击