SDNU 1135.Phone Number(水题)

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

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

Source

#include <cstdio>
#include <iostream>
#include <cmath>
#include <string>
#include <cstring>
#include <algorithm>
#include <queue>
#include <vector>
#include <map>
using namespace std;
#define ll long long

int n;
string s[1000+8];

int main()
{
    while(~scanf("%d", &n) && n != 0)
    {
        for(int i = 0; i<n; i++)
            cin>>s[i];
        bool flag = 1;
        for(int i = 0; i<n; i++)
        {
            for(int j = i+1; j<n; j++)
            {
                int len1 = s[i].size(), len2 = s[j].size();
                for(int k = 0; k<min(len1, len2); k++)
                {
                    if(s[i][k] == s[j][k])
                    {
                        flag = 0;
                        break;
                    }
                }
                if(!flag)break;
            }
            if(!flag)break;
        }
        if(!flag)printf("NO
");
        else printf("YES
");
    }
    return 0;
}
原文地址:https://www.cnblogs.com/RootVount/p/10985742.html