The 2019 ICPC Asia Shanghai Regional Contest B

https://ac.nowcoder.com/acm/contest/4370/B

判斷是否有數是另一個數的前綴,字典樹模板。

#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<string.h>
#include<vector>
#include<cmath>
#include<string>
#include<map>
#include<queue>
using namespace std;
typedef long long ll;
typedef struct node{
	bool flag;
	int CNT=0;
	int next_s[10];
}tire;
tire a[100010];
char s[11];
int cnt;
void init(){
	cnt=0;
	a[0].flag=false;
	memset(a[0].next_s,-1,sizeof(a[0].next_s));
	a[0].CNT=0;
}
bool Insert(){
	int id=0;
	for(int i=0;s[i];i++){
		if(a[id].next_s[s[i]-'0']==-1){
			if(a[id].flag)return false;//
			a[id].next_s[s[i]-'0']=++cnt;
			id=cnt;
			a[cnt].flag=false;
			a[id].CNT=1;
			memset(a[cnt].next_s,-1,sizeof(a[cnt].next_s));
		}
		else {
			id=a[id].next_s[s[i]-'0'];
			a[id].CNT++;
		}
	}
	a[id].flag=true;
	//是否出現過 
	if(a[id].CNT>1)return false;
	else return true;
}
 
int main(){
	int t,n,num;
	int Case=0;
	scanf("%d",&t);
	while(t--){
		init();
		bool flag=true;
		scanf("%d",&n);
		for(int i=0;i<n;i++){
			scanf("%s",s);
			if(flag&&Insert())
			;
			else flag=false;
		}
		if(flag)printf("Case #%d: Yes\n",++Case);
		else printf("Case #%d: No\n",++Case);
	}
	return 0;
}
發佈了148 篇原創文章 · 獲贊 6 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章