//今天刚写的代码,有可能不是很简洁,但是刚开始嘛,不能像那些大牛是的那么厉害的,如果写的不好,请多多包涵。。。
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;
}