电话号码

来源:互联网 发布:淘宝店铺域名有什么用 编辑:程序博客网 时间:2024/05/16 19:25

思路问题而已 , 这道题目的意思是后面的电话号码,不能以前面的电话号码为头 也就是 12 123 这样是错的 123 12 这样又是对的


描述

给定一系列电话号码,判断它们是否符合我们的要求。
例如:
110
10086
100861
这个例子就是不符合要求的,因为当你拨打100861前5位时,它将会拨通10086,而10086已经存在于这组号码之中。

输入

第一行输入一个正整数t(1<=t<=40),表示测试数据的组数。接下来有t组数据,每组数据第一行是一个正整数n,表示电话号码个数,其中1<=n<=10000。接下来有n行,每行都是一个不同的电话号码,每个号码最多10位。

输出

对于每个输入,如果它符合要求,输出"YES",否则,输出 "NO"。

样例输入

2
3
110
10086
100861
5
119
1230
12340
1314521
51886

样例输出

NO
YES

#include <iostream>using namespace std;struct fun{char a[120];int len;//保存长度}t[10086];int main(){int nl;cin>>nl;while(nl--){int i, n, p, j;cin>>n;for(i=0; i<n; i++){scanf("%s",&t[i].a);t[i].len = strlen(t[i].a);}int flag=1;for(i=0; i<n; i++){for(p=i+1; p<n; p++)//用后面的所有的电话号码和前面的比较{if(t[p].len>=t[i].len)//注意长度相等的时候也要比,原来一直就只这里错了,一直不对。{for(j=0; j<t[i].len; j++){if(t[p].a[j]!=t[i].a[j])break;}if(j==t[i].len){ flag=0; break; }}}if(flag==0) break;}if(flag)cout<<"YES"<<endl;elsecout<<"NO"<<endl;}return 0;}