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.
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.
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; }