首页 > 其他分享 >Trie模板

Trie模板

时间:2022-11-24 07:55:06浏览次数:39  
标签:ch sub Trie len int il && 模板

结构体封装的trie
之前TLE了很多次
原因是因为cnt用完没清空...


#include <bits/stdc++.h>
#define il inline
#define re register
using namespace std;

const int N=3e6+10;

il int read() {

	int x=0,f=1;
	char ch=getchar();
	while(ch<48||ch>57) {
		if(ch=='-')f=-1;
		ch=getchar();
	}
	while(ch>=48&&ch<=57) {
		x=(x<<3)+(x<<1)+(ch^48);
		ch=getchar();
	}
	return x*f;

}

il int get_num(char x) {
	if(x>='A'&&x<='Z') return x-'A';
	if(x>='a'&&x<='z') return x-'a'+26;
	if(x>='0'&&x<='9') return x-'0'+52;
}

struct trie {

	int q[N][66],cnt,ch[N];
	il void clear() {

		for(re int i=0; i<=cnt; i++) {

			for(int j=0; j<=64; j++) q[i][j]=0;
			ch[i]=0;

		}
		cnt=0;//就是这里

	}
	il void insert(int len,char *s) {

		int nxt=0;
		for(re int i=0; i<len; i++) {

			int j=get_num(s[i]);
			if(!q[nxt][j]) q[nxt][j]=++cnt;
			nxt=q[nxt][j];
			ch[nxt]++;

		}

	}
	il int query(int len,char *sub) {

		int nxt=0;
		for(re int i=0; i<len; i++) {

			int j=get_num(sub[i]);
			if(!q[nxt][j]) return 0;
			nxt=q[nxt][j];

		}
		return ch[nxt];

	}

} p;

int T,n,q;
char s[N],sub[N];

int main() {

	T=read();
	while(T--) {

		n=read();
		q=read();
		p.clear();
		for(re int i=1; i<=n; i++) {

			cin>>s;
			int len=strlen(s);
			p.insert(len,s);

		}
		for(re int i=1; i<=q; i++) {

			cin>>sub;
			int len=strlen(sub);
			int ans=p.query(len,sub);
			printf("%d\n",ans);

		}

	}

	return 0;
}

标签:ch,sub,Trie,len,int,il,&&,模板
From: https://www.cnblogs.com/Diamondan/p/16920726.html

相关文章

  • 算法基础:区间合并算法及模板应用
    区间合并⭐写在前面的话:本系列文章旨在复习算法刷题中常用的基础算法与数据结构,配以详细的图例解释,总结相应的代码模板,同时结合例题以达到最佳的学习效果。本专栏面向算法零......
  • 【模板】模拟退火 Simulated Annealing
    postedon2021-05-0418:16:24|under学术|source模拟退火适用于:你不会正解能写出估价函数,而且最优解的估价最大/小估价函数不单调,不能二分人品好由于是个带......
  • Qt5 CMake项目简单模板
    cmake_minimum_required(VERSION3.5)project(testVERSION0.1LANGUAGESCXX)set(CMAKE_INCLUDE_CURRENT_DIRON)set(CMAKE_CXX_STANDARD11)set(CMAKE_CXX_STAN......
  • 数据结构初阶--顺序表(讲解+C++类模板实现)
    顺序的概念与结构顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。一般分为两种:静态顺序表和动......
  • 【模板】Tarjan
    postedon2022-07-0720:52:49|under模板|source0x00有向图缩点现有一有向图\(G=(V,E)\),称一个点集\(E'\inE\)为强连通分量,当且仅当\(E'\)的任意两点可以互......
  • Trie树
    了解Trie树    我们知道trie树(也叫字母树)这种数据结构。它是词典的一种存储方式。词典中的每一个单词在trie树中表现为一条从根结点出发的路径,路径中边上的字母连起......
  • [工具问题] docker.mysql8 Public Key Retrieval is not allowed
    TochangethesettingsonDbeaver:Rightclickyourconnection,choose"EditConnection"Onthe"Connectionsettings"screen(mainscreen)clickon"EditD......
  • Java FreeMarker模板引擎注入深入分析
    0x01前言最近和 F1or 大师傅一起挖洞的时候发现一处某CMSSSTI的0day,之前自己在复现jpress的一些漏洞的时候也发现了SSTI这个洞杀伤力之大。今天来好好系统学习......
  • template模板初步介绍(11)
    template模板文本文件,嵌套有脚本(使用模板编程语言编写)借助模板生成真正的文件,Jinja2语言Jinja2是基于python的模板引擎,功能比较类似于于PHP的smarty,J2ee的Freemarker和......
  • Mat_类模板
    先来段代码感受一下MatC=(Mat_<double>(3,3)<<0,-1,0,-1,5,-1,0,-1,0);MatD=(Mat_<double>(3,3)<<1,2,3,4,6,7,8,9,10);cout<<"C="<<......