zoukankan      html  css  js  c++  java
  • hiho #1014 : Trie树(模板)

    Trie树

    【题目链接】Trie树

    &题意:

    输入
    输入的第一行为一个正整数n,表示词典的大小,其后n行,每一行一个单词(不保证是英文单词,也有可能是火星文单词哦),单词由不超过10个的小写英文字母组成,可能存在相同的单词,此时应将其视作不同的单词。接下来的一行为一个正整数m,表示小Hi询问的次数,其后m行,每一行一个字符串,该字符串由不超过10个的小写英文字母组成,表示小Hi的一个询问。
    n, m<=100000,词典的字母表大小<=26.

    输出
    对于小Hi的每一个询问,输出一个整数Ans,表示词典中以小Hi给出的字符串为前缀的单词的个数。

    &题解:

    Trie蓝书模板

    &代码:

    #include <bits/stdc++.h>
    using namespace std;
    #define INF 0x3f3f3f3f
    typedef long long ll;
    const int maxNo= 1000000 +7,sSi=26;
    struct Trie {
    	int ch[maxNo][sSi],val[maxNo],sz;
    	void init() {sz=1; memset(ch[0],0,sizeof(ch[0])); memset(val,0,sizeof(val));}
    	int idx(char c) {return c-'a';}
    	void insert(char *s) {
    		int u=0;
    		for(int i=0; s[i]; i++) {
    			int c=idx(s[i]);
    			if(!ch[u][c]) {
    				memset(ch[sz],0,sizeof(ch[sz]));
    				ch[u][c]=sz++;
    			}
    			u=ch[u][c];
    			val[u]++;
    		}
    	}
    	int query(char *s) {
    		int u=0;
    		for(int i=0; s[i]; i++) {
    			int c=idx(s[i]);
    			if(!ch[u][c]) return 0;
    			u=ch[u][c];
    		}
    		return val[u];
    	}
    } tr;
    int n,m;
    char s[20];
    int main() {
    	freopen("E:1.in","r",stdin);
    	while(~scanf("%d",&n)) {
    		tr.init();
    		for(int i=0; i<n; i++) {
    			scanf("%s",s);
    			tr.insert(s);
    		}
    		scanf("%d",&m);
    		// for(int i=0; i<5; i++) {
    		// 	printf("%d ",tr.val[i]);
    		// } puts("");
    		for(int i=0; i<m; i++) {
    			scanf("%s",s);
    			// puts(s);
    			printf("%d
    ",tr.query(s));
    		}
    	}
    	return 0;
    }
    
  • 相关阅读:
    转:五年java人的一点感悟
    6:ZigZag Conversion
    5:Longest Palindromic Substring
    4:Median of Two Sorted Arrays
    3:Longest Substring Without Repeating Characters
    读写分离
    docker swarm部署spring cloud服务
    kubeadm方式安装kubernetes
    《Spring Boot 实战》随记
    https部署
  • 原文地址:https://www.cnblogs.com/s1124yy/p/6706151.html
Copyright © 2011-2022 走看看