且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

NEFU 659

更新时间:2022-06-16 05:09:41

//今天刚写的代码,有可能不是很简洁,但是刚开始嘛,不能像那些大牛是的那么厉害的,如果写的不好,请多多包涵。。。

description


We know that if a phone number A is another phone number B’s prefix, B is not able to be called. For an example, A is 123 while B is 12345, after pressing 123, we call A, and not able to call B.
Given N phone numbers, your task is to find whether there exits two numbers A and B that A is B’s prefix.

input


Input
The input consists of several test cases.
The first line of input in each test case contains one integer N (0 < N < 1001), represent the number of phone numbers.
The next line contains N integers, describing the phone numbers.
The last case is followed by a line containing one zero.

output


For each test case, if there exits a phone number that cannot be called, print “NO”, otherwise print “YES” instead.

sample_input


2
012
012345
2
12
012345
0

sample_output


NO
YES

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
struct sa
{
char st[1000];
int l;
}data[1005];
int main()
{
int m;
while(~scanf("%d",&m)&&m!=0)
{
int flag=0;
for(int i=0;i<m;i++)
{
scanf("%s",data[i].st);
data[i].l=strlen(data[i].st);
}
for(int i=0;i<m;i++)
{
for(int j=i+1;j<m;j++)
{
int k=0;
while(1)
{

if(data[i].st[k]==data[j].st[k])
k++;
else
break;
if(k==data[i].l)
flag=1;
}
k=0;
}
}
if(flag==0)cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
return 0;
}