zoukankan      html  css  js  c++  java
  • SP4033 PHONELST

    SP4033 PHONELST - Phone List

    Trie的经典题。

    考虑在插入的时候直接查询掉。

    如果插入时没有新建节点,说明它是某个串的前缀

    插入完在末节点打个标记。

    如果插入的时候遇上了标记,说明某个串是它的前缀

    跑到底就输出YES

    注意不能直接 break ,读入还是要读完

    #include<bits/stdc++.h>
    using namespace std;
    #define gc() getchar()
    const int N=100005;
    char s[12];
    int cnt,n,ch[N][12],T,flag,en[N*12];
    bool f;
    int ins(char *s) {
    	int len=strlen(s),u=1,f=1;
    	for(int i=0; i<len; ++i) {
    		int v=s[i]-'0';
    		if(!ch[u][v])ch[u][v]=++cnt,f=0;
    		u=ch[u][v];
    		if(en[u])return 1;
    	}
    	en[u]=1;
    	return f;
    }
    void clear() {
    	memset(ch,0,sizeof(ch));
    	memset(en,0,sizeof(en));
    	cnt=1;flag=0;
    }
    int main() {
    	scanf("%d",&T);
    	while(T--) {
    		clear();
    		scanf("%d",&n);
    		for(int i=1;i<=n;++i) {
    			scanf("%s",s);
    			if(flag)continue;
    			if(ins(s))flag=true;
    		}
    		puts(flag?"NO":"YES");
    	}
    	return 0;
    }
    
    路漫漫其修远兮,吾将上下而求索
  • 相关阅读:
    mysql 基础sql语句
    mysql存储引擎概述
    docker命令总结
    python链接postgresql
    Log4.net示例
    postgresql 使用游标笔记
    npm常用命令
    Nginx命令
    Ubuntu命令总结
    NHibernate总结
  • 原文地址:https://www.cnblogs.com/zzctommy/p/12416330.html
Copyright © 2011-2022 走看看