为啥RE
查看原帖
为啥RE
929197
angel_yc楼主2023/2/6 15:55
#include <cstdio>
#include <cstring>
const int N = 1e4+10,M = 1e5+10;
int son[N][20],idx;
char a[N][20]; 
int cnt[M];
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]++;   //不在结尾做标记了,只要走过cnt[p]就++
	}
	//cnt[p]++;
} 
int query(char str[]){
	int p = 0;
	for(int i = 0;str[i];i++){
		int t = str[i] - '0';
		if(!son[p][t])  return 0;
		p = son[p][t];
	}
	return cnt[p];
}
int main(){
	int t,n;
	scanf("%d",&t);
	while(t--){
		scanf("%d",&n);
		for(int i = 0;i < n;i++){
			scanf("%s",&a[i]);
			insert(a[i]);
		}
		//查找 
		int flag = 0;
		for(int i = 0;i < n;i++){
			int x=query(a[i]);
			if(x>1){        //str自己也是自己的前缀
				printf("NO\n");
				break;			    
			}                       
			else{
			   printf("YES\n");
			   break; 
			} 
		}
		memset(son,0,sizeof son);
		memset(cnt,0,sizeof cnt);
	}
	return 0;
} 
2023/2/6 15:55
加载中...