0
点赞
收藏
分享

微信扫一扫

HDU 1251 统计难题(统计以某个字符串为前缀的字符串数量)

Sikj_6590 2022-08-04 阅读 17


题目地址:​​点击打开链接​​

思路:模板题,不用释放内存,就一组数据,用C++提交,G++可能会MLE

AC代码:

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <queue>
#include <stack>
#include <map>
#include <cstring>
#include <climits>

using namespace std;

const int maxn = INT_MAX;

struct trie
{
int v;
trie *next[26];
};//加分号
trie *root;

void create_trie(char *str)
{
int len = strlen(str);
int i,j,id;
trie *p = root,*q;
for(i=0; i<len; i++)
{
id = str[i] - 'a';
if(p->next[id] == NULL)
{
q = (trie*)malloc(sizeof(trie));
for(j=0; j<26; j++)
{
q->next[j] = NULL;
}
q->v = 1;
p->next[id] = q;
p = p->next[id];
}
else
{
p = p->next[id];
p->v++;
}
}
}

int find_trie(char *str)
{
trie *p = root;
int i,id,len = strlen(str);
for(i=0; i<len; i++)
{
id = str[i] - 'a';
if(p->next[id] == NULL)
return 0;
p = p->next[id];
}
return p->v;
}

int main()
{
int i;
char lol[15];
int sum;
root = (trie*)malloc(sizeof(trie));
for(i=0; i<26; i++)
{
root->next[i] = NULL;
}
while(gets(lol) && lol[0] != '\0')
create_trie(lol);
while(gets(lol))
{
sum = find_trie(lol);
printf("%d\n",sum);
}
return 0;
}



举报

相关推荐

0 条评论