AcWing 161. 电话列表
原题链接
简单
作者:
weiwei
,
2020-06-19 22:41:32
,
所有人可见
,
阅读 604
C++ 代码
#include<bits/stdc++.h>
using namespace std;
const int N = 100010;
typedef long long LL;
int son[N][12], cnt[N], idx;
char str[N][12];
int T;
int n;
void insert(char str[]){
int p = 0;
for(int i = 0; str[i]; i++){
int t = str[i] - '0';
if(!son[p][t]) son[p][t] = ++idx;
p = son[p][t];
}
cnt[p]++;
}
bool check(char str[]){
int p = 0;
for(int i = 0; str[i]; i++){
if(cnt[p]) return false;
int t = str[i] - '0';
p = son[p][t];
}
return true;
}
int main(){
cin>>T;
while(T--){
cin>>n;
idx = 0;
memset(son, 0, sizeof son);
memset(cnt, 0, sizeof cnt);
memset(str, 0, sizeof str);
int flag = true;
for(int i = 0; i < n; i++){
scanf("%s", str[i]);
insert(str[i]);
}
for(int i = 0; i < n; i++){
if(!check(str[i])) {
flag = false;
}
}
if(!flag) puts("NO");
else puts("YES");
}
return 0;
}