【洛谷】P8306 【模板】字典树

news/2024/10/20 18:56:46/

 

 (最后有解释哦)

0:所需参数

const int N=3e6+10;int t[N][70],cnt[N],idx;
char s[N];

 1.映射字符

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

2.插入字符串

void insert(char str[]) {int p=0,len=strlen(str);for(int i=0; i<len; i++) {int c=getnum(str[i]);if(!t[p][c]) t[p][c]=++idx;p=t[p][c];cnt[p]++;}
}

3.查询操作

int find(char str[]) {int p=0,len=strlen(str);for(int i=0; i<len; i++) {int c=getnum(str[i]);if(!t[p][c]) return 0;p=t[p][c];}return cnt[p];
}

 

4:进行(如果多组数据)初始化操作

void insert(char str[]) {int p=0,len=strlen(str);for(int i=0; i<len; i++) {int c=getnum(str[i]);if(!t[p][c]) t[p][c]=++idx;p=t[p][c];cnt[p]++;}idx=0;
}

 ACcode:

#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=3e6+10;
int T,q,n,t[N][70],cnt[N],idx;
char s[N];
int getnum(char x) {if(x>='A'&&x<='Z') return x-'A';else if(x>='a'&&x<='z') return x-'a'+26;else return x-'0'+52;
}
void insert(char str[]) {int p=0,len=strlen(str);for(int i=0; i<len; i++) {int c=getnum(str[i]);if(!t[p][c]) t[p][c]=++idx;p=t[p][c];cnt[p]++;}
}
int find(char str[]) {int p=0,len=strlen(str);for(int i=0; i<len; i++) {int c=getnum(str[i]);if(!t[p][c]) return 0;p=t[p][c];}return cnt[p];
}
void init() {for(int i=0; i<=idx; i++) {for(int j=0; j<=122; j++) {t[i][j]=0;}}for(int i=0; i<=idx; i++) {cnt[i]=0;}
}
void solve() {init();idx=0;cin>>n>>q;for(int i=1;i<=n;i++){cin>>s;insert(s);}for(int i=1;i<=q;i++){cin>>s;cout<<find(s)<<"\n";}
}
signed main() {ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);int t=1;cin>>t;while(t--) {solve();}return 0;
}

 

 

 


http://www.ppmy.cn/news/342676.html

相关文章

[Daimayuan] 分段求和(C++,二分)

对于给定的一个长度为 N N N 的正整数数列 A 1 − N A_{1−N} A1−N​&#xff0c;现要将其分成 M ( M ≤ N ) M(M≤N) M(M≤N) 段&#xff0c;并要求每段连续&#xff0c;且每段和的最大值最小。 关于最大值最小&#xff1a; 例如一数列 4 , 2 , 4 , 5 , 1 4,2,4,5,1 4,…

谷歌Imagen Editor融入AI技术,助力图片创作

AI科技的应用越来越广泛&#xff0c;自然也被各个公司所重视&#xff0c;近日谷歌就推出利用AI技术的图片创作软件Imagen Editor&#xff0c;这款软件成熟以后&#xff0c;或将助力图片的创作。 近日有消息称&#xff0c;谷歌正在研发一款名为Imagen Editor生成式AI工具&…

java:找不到符号 符号:变量:log get set

问题&#xff1a;java&#xff1a;找不到符号&#xff1a;变量&#xff1a;log get set解决方法&#xff1a;在idea中&#xff0c;点击file-Settings&#xff0c;打开配置页面&#xff0c;如图红框位置&#xff0c;输入&#xff1a; -Djps.track.ap.dependenciesfalse

亚马逊美国站 儿童珠宝首饰CPC认证 ASTM F2923标准CPSIA检测报告

为什么越来越多人爱送珠宝给宝宝? 1、有人说每个小孩子都是来自神的恩典&#xff0c;他们就像父母最珍贵的珠宝值得用一生的时间去呵护与珍藏。 2、西班牙人认为&#xff0c;儿童珠宝作为他们的第一份礼物&#xff0c;会庇佑孩子们未来过上非常幸福&#xff0c;繁荣而成功的…

一分钟了解什么nft数字藏品,有什么价值

NFT&#xff08;Non-Fungible Token&#xff09;数字藏品是一种基于区块链技术的数字资产&#xff0c;具有唯一性和不可替代性。它们是数字文件的独特表示&#xff0c;通过区块链的不可篡改性和透明性确保其真实性和所有权。相比传统的数字文件&#xff0c;NFT数字藏品在艺术、…

react中如何给为一个元素规定多个类,以及给元素添加行内样式,内部样式和外部样式

react中如何给为一个元素规定多个类&#xff0c;以及给元素添加行内样式&#xff0c;内部样式和外部样式 为一个元素规定多个类(静态添加)为一个元素规定多个类(动态添加)行内样式内部样式外部样式 为一个元素规定多个类(静态添加) <div className{tipsTxt tipsStyle}>通…

uniapp支付页面模板

支付组件 <template><view><u-popup v-model"show" mode"bottom" :closeable"true" close"close"><view class"plr-40"><view class"center ptb-30">选择支付方式</view>&l…

上位机工业协议-FinsTCP

1、欧姆龙设备通信 - PLC&#xff1a;系列 CS系列、CJ系列、CP系列、NX系列 &#xff08;1&#xff09;微型&#xff1a;CPM1A、CPM2A、CP1H、CP1L&#xff08;2&#xff09;小型&#xff1a;CPM2C、CQM1H、CJ1M&#xff08;3&#xff09;中型&#xff1a;C200H、CJ1、CS1&…