Phone Number
Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^
题目描述
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.
Given N phone numbers, your task is to find whether there exits two numbers A and B that A is B’s prefix.
输入
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.
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.
输出
For each test case, if there exits a phone number that cannot be called, print “NO”, otherwise print “YES” instead.
示例输入
2 012 012345 2 12 012345 0
示例输出
NO YES
提示
来源
2010年山东省第一届ACM大学生程序设计竞赛
#include <stdio.h>
#include <iostream>
using namespace std;
bool cmp(string s1,string s2)
{
for(int i=0,j=0; s1[i]!='\0'&&s2[j]!='\0'; i++,j++)
if(s1[i]!=s2[j])
return false;
return true;
}
int main()
{
int n;
while(scanf("%d",&n)&&n)
{
int flag=1;
string s[n];
int i=0;
while(i<n)
{
cin>>s[i];
i++;
}
for(int i=0; i<n&&flag; i++)
{
for(int j=i+1; j<n&&flag; j++)
{
if(cmp(s[i],s[j]))
{
flag=0;
cout<<"NO"<<endl;
}
}
}
if(flag==1)
{
cout<<"YES"<<endl;
}
}
return 0;
}