全RE+TLE求条
查看原帖
全RE+TLE求条
656447
QAQ2012楼主2025/2/4 12:02
#include<bits/stdc++.h>

using namespace std;
char trie[3000005][65];
int n,T,q;
int c,idx,cnt[3000005];//记录同根节点的串 
string tmp;
void insert(string s){
    int p=0,lens=s.size()-1;
    for(int i = 0 ; i <= lens ; i++){
        if(s[i]>='A'&&s[i]<='Z'){
        	c=s[i]-'A';
		}
	    else if(s[i]>='a'&&s[i]<='z'){
	    	c=s[i]-'a'+26;
		}
	    else{
	    	c=s[i]-'0'+52;
		}   
        if(!trie[p][c]){
        	trie[p][c]=++idx;//当前是第idx个节点 
		}   
        p=trie[p][c];//访问下一个字符 
        cnt[p]++;
    }
}
int find(string s){
    int p=0,lens=s.size()-1;
    for(int i = 0 ; i <= lens ; i++){
        if(s[i]>='A'&&s[i]<='Z'){
        	c=s[i]-'A';
		}
	    else if(s[i]>='a'&&s[i]<='z'){
	    	c=s[i]-'a'+26;
		}
	    else{
	    	c=s[i]-'0'+52;
		}
        if(!trie[p][c]){
        	return 0;//不存在这个点 
		}
        p=trie[p][c];
    }
    return cnt[p];//记录同根节点的串 
}

int main(){
	cin>>T;
	while(T--){
		idx=0;
		memset(trie,0,sizeof(trie));
		memset(cnt,0,sizeof(cnt));
        cin>>n>>q;
        for(int i = 1 ; i <= n ; i++){
            cin>>tmp;
            insert(tmp);
        }
        for(int i = 1 ; i <= q ; i++){
            cin>>tmp;
          	cout<<find(tmp)<<endl;
        }
	}
	return 0;
}

2025/2/4 12:02
加载中...