36pts,求错误
查看原帖
36pts,求错误
746373
Y_jsy楼主2024/7/31 20:26
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
const int MINF = 3e6+5;
int t,n,m,dep,ans;

struct node {
	int name[99],count;
};
node tree[MINF];

inline int in_make() {
	memset(tree[dep].name,-1,sizeof(tree[dep].name));
	tree[dep].count = 0;
	return dep++;
}

inline void push_make(string s) {
	int r=0;
	for(int i=0;i<s.size();i++) {
		int son;
		if('A'<=s[i] && s[i] <= 'Z') {son = s[i] - 'A'+40;}
		else if('a'<=s[i] && s[i] <= 'z') {son = s[i]-'a'+20;}
		else {son = s[i]-'0';}
		
		if(tree[r].name[son] == -1 ) {
			tree[r].name[son] = in_make();
		}
		r = tree[r].name[son];
		tree[r].count++;
	}
}

inline int find_word(string s) {
	int r=0;
	for(int i=0;i<s.size();i++) {
		int son;
		if('A'<=s[i] && s[i] <= 'Z') {son = s[i] - 'A'+30;}
		else if('a'<=s[i] && s[i] <= 'z'){son = s[i]-'a'+20;}
		else {son = s[i]-'0';}
		
		if(tree[r].name[son] == -1 ) {
			return 0;
		}
		r = tree[r].name[son];
	}
	return tree[r].count;
}

void f() {
	freopen("Trie.in","r",stdin);
	freopen("Trie.out","w",stdout);
}

int main(void) {
	//f();
	std::ios::sync_with_stdio(false);
	cin>>t;
	while(t) {
 		t--;dep=0,ans=0;
 		cin>>n>>m;
 		in_make();
 		
 		for(int i=1;i<=n;i++) {
 			string s;
 			cin>>s;
 			push_make(s);
 		}
 		for(int i=1;i<=m;i++) {
 			string s; 
 			cin>>s;
 			ans=find_word(s); 
 			cout<<ans<<endl;
 			//if(find_word(s)) cout<<"1"<<endl;
 		}
 	}
 	return 0;
}
2024/7/31 20:26
加载中...