字符串
QingQingDE23
这个作者很懒,什么都没留下…
展开
-
AcWing 143 最大异或对 题解(字典树求树上异或和 模板)( 字典树 Tire)
#include<iostream>#include<algorithm>using namespace std;const int N = 1e5 + 10;int son[N * 31][2], idx;//son[]记录线段树可能有1e5个31位的二进制树,所以son[31*1e5][2] int n;int a[N];void insert(int x){ int p = 0;//字典树根节点 for(int i = 30; i >= 0; i原创 2021-08-18 21:58:09 · 122 阅读 · 0 评论 -
牛客 单词查找树 题解(字典树 Tire)
①注意单词的输入方式②注意题中给的都是大写字母#include<iostream>using namespace std;const int N = 1e4 + 10;int son[N][26], idx;char str[N];void insert(char str[]){ int p = 0; for(int i = 0; str[i]; i ++ ){ int u = str[i] - 'A'; if(!son[p][u]) son[p][u] = +原创 2021-08-18 16:07:18 · 123 阅读 · 0 评论 -
AcWing Tire字符串统计 题解(字典树 Tire 模板)
#include<iostream>using namespace std;const int N = 1e5 + 10;int son[N][26], cnt[N], idx;//son[]储存这个节点的所有子节点,cnt[]储存以这个节点为结尾的单词的个数,idx表示已用的结点个数char str[N];int n;void insert(char str[]){ int p = 0;//从根节点开始遍历(根节点没有储存字母) for(int i = 0; str[i原创 2021-08-18 11:39:30 · 104 阅读 · 0 评论 -
HDU 剪花布条 题解(KMP模板题)
#include<iostream>using namespace std;const int N = 1e3 + 10;char s1[N], s2[N];int ne[N];bool st[N];int main(){ cin>>s1 + 1; while(s1[1] != '#'){ cin>>s2 + 1; int rv = 0; int len1 = 0, len2 = 0; for(int i = 1; i <=原创 2021-08-17 17:44:53 · 53 阅读 · 0 评论 -
AcWing KMP字符串 题解( KMP匹配字符串 模板)(KMP)
核心思想:当子串和母串不匹配时,直接让子串下移到下一次可以和前面部分字符串匹配的地方,节省了中间无效的匹配时间#include<iostream>using namespace std;const int N = 1e5 + 10, M = 1e6 + 10;int n, m;char p[N], s[M];int ne[N];int main(){ cin>> n >> p + 1 >> m >> s + 1;//字符串原创 2021-08-17 14:19:30 · 175 阅读 · 1 评论 -
AcWing 841 字符串哈希 题解 (字符串哈希 模板)(哈希表 Hash)
字符串哈希的原理:将每段字符串化为P进制的数,赋予唯一的‘地址 ’,通过地址比较字符串,时间复杂度为O(1),如果挨个字符进行比较,时间复杂度为O(字符串长度)#include<iostream>using namespace std;typedef unsigned long long ULL;const int N = 1e5 + 10, P = 131;//P经验值131、1331int h[N], p[N];//h数组储存以末尾字符为标志的每段字符串的特殊‘地址 ’,p原创 2021-08-16 22:51:37 · 109 阅读 · 0 评论 -
AcWing 模拟散列表 题解(开放寻址法解决冲突 模板)(哈希表 Hash)
哈希表 开放寻址法原理:先让数x对应到坑k,如果这个坑位有元素,就让k++,寻找的时候也是,先找x对应的坑位k,如果这个坑位有元素但不是x,就让k++,继续往后找#include<iostream>#include<cstring>using namespace std;const int N = 200003/*N一般选择大于数据范围的第一个质数*/, null = 0x3f3f3f3f;int h[N];//坑位数组,存放元素 int find(int x){原创 2021-08-16 15:55:53 · 230 阅读 · 0 评论 -
AcWing 840 模拟散列表 (拉链法解决冲突 模板)(哈希表 Hash)
哈希表 拉链法解决冲突原理:(大数对应一个小数,加快查找速率)建立一条拉链,每个拉链为一个槽,每个槽涵盖一个链表,将所有处理过的数放入对应槽的链表中#include<iostream>#include<cstring>using namespace std;const int N = 1e5 + 3;//N最好是质数且远离2的整倍数(可证明) int h[N], ne[N], e[N], idx;void add(int x){ int k = (x % N +原创 2021-08-16 10:33:31 · 173 阅读 · 0 评论