zoukankan      html  css  js  c++  java
  • CH1601 【模板】前缀统计 (trie树)

    题目地址


    注意点:

    • 直接将ed[]数组作为字符串存在数量的计数数组即可.

    #include<cstdio>
    #include<iostream>
    #include<cstring>
    using namespace std;
    const int SIZE=1000010;
    int trie[SIZE][26],ed[SIZE],tot=1;
    void insert(char* str){
    	int len=strlen(str),p=1;
    	for(int i=0;i<len;i++){
    		int ch=str[i]-'a';
    		if(!trie[p][ch])trie[p][ch]=++tot;
    		p=trie[p][ch];
    	}
    	ed[p]+=1;
    }
    int search(char* str){
    	int ans=0;
    	int len=strlen(str),p=1;
    	for(int i=0;i<len;i++){
    		int ch=str[i]-'a';
    		if(!trie[p][ch])return ans;
    		p=trie[p][ch],ans+=ed[p];
    	}
    	return ans;
    }
    char str[SIZE];
    int main(){
    	int n,m;
    	scanf("%d%d",&n,&m);
    	for(int i=1;i<=n;i++){
    		scanf("%s",&str);
    		insert(str);
    	}
    	for(int i=1;i<=m;i++){
    		scanf("%s",&str);
    		printf("%d
    ",search(str));
    	}
    	return 0;
    }
  • 相关阅读:
    十一作业
    11.20
    11.13 第十二次、
    11.13 第十一次、
    11.06第十次、
    11.06第九次、
    10.30
    10.23
    10.16
    10.9
  • 原文地址:https://www.cnblogs.com/zbsy-wwx/p/11680615.html
Copyright © 2011-2022 走看看