洛谷—模板字典树 P8306

简介: 洛谷—模板字典树 P8306

a9262ed0dcecf6bfdde8097267f3df4d_bc67e089d80f4b3188f2b94ec1bfbab5.png先对输入的模式串进行处理建树

void insert(string x)
{
  int p=0;//创建根节点
  for(int i=0;i<x.size();i++)
  {
    int y=x[i]-'0';//对字符进行处理
    trie[p][y]=++id;
    p=trie[p][y];//进入下一层
    red[p]++;//储存到该点有多少模板串有此作为前缀
  }
}


之后对每次询问进行查询

int find(string x)
{
  int p=0;
  for(int i=0;i<x.size();i++)
  {
    int y=x[i]-'0';//处理模板串
    if(!trie[p][y])//未开创此条路线,直接结束
    return 0;
    p=trie[p][y];//进入下一层
  }
  return red[p];//返回答案
}

因为是多实例,每次对数组进行手动清空处理(用memset会MLE

for(int i=0;i<=id;i++)
    {
      for(int j=0;j<100;j++)
      trie[i][j]=0;
    }
    for(int i=0;i<=id;i++)
    red[i]=0;
    id=0;

AC代码:

#include<bits/stdc++.h>
using namespace std;
int trie[3000009][100];
int red[3000009];
int id;
void insert(string x)
{
  int p=0;
  for(int i=0;i<x.size();i++)
  {
    int y=x[i]-'0';
    trie[p][y]=++id;
    p=trie[p][y];
    red[p]++;
  }
}
int find(string x)
{
  int p=0;
  for(int i=0;i<x.size();i++)
  {
    int y=x[i]-'0';
    if(!trie[p][y])
    return 0;
    p=trie[p][y];
  }
  return red[p];
}
int main()
{
  int t;
  cin>>t;
  while(t--)
  {
    int n,q;
    cin>>n>>q;
    for(int i=0;i<=id;i++)
    {
      for(int j=0;j<100;j++)
      trie[i][j]=0;
    }
    for(int i=0;i<=id;i++)
    red[i]=0;
    id=0;
    for(int i=0;i<n;i++)
    {
      string x;
      cin>>x;
      insert(x);
    }
    for(int i=0;i<q;i++)
    {
      string x;
      cin>>x;
      cout<<find(x)<<endl;
    }
  }
  return 0;
}

目录
相关文章
|
7月前
树状数组模板
树状数组模板
43 0
|
2月前
|
算法
Leetcode第十四题(最长公共前缀)
这篇文章介绍了一种算法,用于在给定的字符串数组中找到最长公共前缀,通过逐字符比较每个字符串的对应位置,一旦发现不匹配立即返回当前已匹配的子串作为公共前缀。
26 0
|
6月前
|
C++
【洛谷 P1618】三连击(升级版)题解(深度优先搜索+位集合)
`三连击(升级版)` 是一道编程题,要求将数字 $1$ 到 $9$ 分成三组,构成三个三位数,其比例为 $A:B:C$。给定 $A$, $B$, $C$,程序应找到所有可能的组合并按首位升序输出。输入为 $A$, $B$, $C$,输出是满足比例的三位数或&quot;No!!!&quot;(当无解时)。解决方案涉及全排列搜索和比例验证。提供的AC代码使用C++,通过位集记录数字使用情况,递归实现全排列。
72 0
|
7月前
|
算法
代码随想录算法训练营第五十五天 | LeetCode 583. 两个字符串的删除操作、72. 编辑距离、编辑距离总结
代码随想录算法训练营第五十五天 | LeetCode 583. 两个字符串的删除操作、72. 编辑距离、编辑距离总结
60 1
|
7月前
线段树模板
线段树模板
46 0
|
SQL 人工智能 开发框架
线段树模板+例题
线段树模板+例题
78 1
|
算法
回溯算法 全排列模板
回溯算法 全排列模板
79 0
|
算法
树状数组模板与练习
树状数组模板与练习
102 0
|
存储 算法
线段树模板与练习
线段树模板与练习
106 0