[알고리즘 경기 진급 안내] 접두사 통계 (trie 트 리)
2690 단어 알고리즘알고리즘 경기 진급 안내알고리즘 템 플 릿
N 개의 문자열 S1, S2... SN 을 주어진 다음 M 번 질문 을 합 니 다. 주어진 문자열 T 에 대해 물 어 볼 때마다 S1 ~ SN 에 T 의 접두사 가 몇 개 있 는 지 물 어 봅 니 다.
입력 문자열 의 총 길 이 는 10 ^ 6 을 초과 하지 않 고 소문 자 만 포함 합 니 다.
입력 형식
첫 줄 에 정수 N, M 두 개 를 입력 하 십시오.
다음 N 줄 마다 문자열 Si 를 입력 하 십시오.
다음 M 줄 마다 문자열 T 를 물 어 봅 니 다.
출력 형식
모든 질문 에 정 수 를 출력 하여 답 을 표시 합 니 다.
각 답안 이 한 줄 을 차지 하 다.
입력 예시:
3 2
ab
bc
abc
abc
efg
출력 예시:
2
0
분석:
#include
#include
using namespace std;
const int N=1e6+5,English=26;
typedef struct trie{
int count;
struct trie *children[English];
}trie;
char s[N];
int n,m;
// trie
trie* creat_trie_node(){
trie *pnode=new trie();
pnode->count=0;
for(int i=0;ichildren[i]=NULL;
}
return pnode;
}
// key trie
void trie_insert(trie *root,char *key){
trie *node=root;
char *p=key;
while(*p){
if(node->children[*p-'a']==NULL){
node->children[*p-'a']=creat_trie_node();
}
node=node->children[*p-'a'];
p++;
}
node->count++;
}
// trie
void show_trie(trie *root){
trie *node=root;
if(node!=NULL){
for(int i=0;ichildren[i]) {
printf("%c ",i+'a');
show_trie(node->children[i]);
}
}
}
}
// trie
int trie_search(trie *root,char *key){
trie *node=root;
char *p=key;
int ans=0;
while(*p&&node!=NULL){
ans+=node->count;
node=node->children[*p-'a'];
p++;
}
if(node!=NULL) ans+=node->count;
return ans;
}
int main()
{
cin>>n>>m;
trie *root=creat_trie_node();
for(int i=0;i>s;
trie_insert(root,s);
// show_trie(root);cout<>s;
ans=trie_search(root,s);
cout<
#include
#include
using namespace std;
const int N=1e6+5,M=5e5+5,W=26;
int trie[M][W],p[M],idx;
char s[N];
int n,m;
//k trie
void trie_insert(char *k){
int t=0;
for(int i=0;k[i];i++){
int &x=trie[t][k[i]-'a'];
if(!x) x=++idx;
t=x;
}
p[t]++;
}
// trie k
int query(char *k){
int t=0,ans=0;
for(int i=0;k[i];i++){
int &x=trie[t][k[i]-'a'];
if(!x) break;
t=x;
ans+=p[t];
}
return ans;
}
int main()
{
cin>>n>>m;
for(int i=0;i>s;
trie_insert(s);
}
for(int i=0;i>s;
cout<
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
【Codility Lesson3】FrogJmpA small frog wants to get to the other side of the road. The frog is currently located at position X and wants to get to...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.