- 博客(18)
- 收藏
- 关注
原创 Acwing: Hash表
(1)使用情景:将一个值域比较大的集合,映射到从0到n(n是10^5~~10^6的级别,比较小)(2)上面模的那个数尽可能是质数,而且尽可能离2的整数幂比较远,此时发生冲突的概率最小(3)处理冲突(值域比较大,在映射时可能对应同一个值)的方式有两种,开放寻址法和拉链法(4)两种方法在实现删除操作的话,都是设一个bool数组,在需要删除的元素中做一个标记。
2024-05-05 14:44:27
1026
2
原创 acwing:Trie树,并查集,堆
1.定义:高效地存储和查找字符串例:(标记表示在此处有一个以该字母结束的英文单词)2.例题:插入和查找字符串在集合中出现了多少次int son[N][26], cnt[N]//表示以p结尾的单词数, idx;int p = 0;str[i];i ++ )//将英文字母映射到0~25if (!//如果不存在则插入cnt[p] ++;int p = 0;str[i];i ++ )if (!
2024-05-05 11:25:54
557
2
原创 acwing:单链表,双链表,邻接表,栈,队列
/ head 表示头结点的下标// e[i] 表示节点i的值// ne[i] 表示节点i的next指针是多少// idx 存储当前已经用到了哪个点// 初始化head = -1;idx = 0;// 将x插到头结点// 将x插到下标是k的点后面// 将下标是k的点后面的点删掉int main()int m;cin >> m;init();int k, x;char op;cin >> op;
2024-04-29 20:44:04
430
原创 acwing:双指针,位运算,lowbit,离散化,区间合并
1.模板2.例题:(1)每行输出一个单词int main()/ /此处不能使用cin,cin会省略空格i<n;= 0)j++;k < j;i = j;return 0;(2)输出最长不重复子序列int n;i < n;i < n;//*******记录每个数出现的次数s[a[j]]--;
2024-04-27 11:27:34
706
1
原创 高精度乘法(ACwing)
int t = 0;i ++ )t /= 10;return C;int main()string a;int b;i >= 0;i >= 0;return 0;
2024-04-21 12:54:11
241
1
原创 高精度加法
存大整数的时候,数组下标为0应该存的是大整数的最低位(个位),因为有进位时在数组末端加比较方便。/使用引用号的原因:加上可以不用把数组重新拷贝一遍。int t = 0;//最后如果有进位,则把t放入数组中。//倒序存储,将单个字符转化为数。//倒序输出就是答案。
2024-04-21 12:06:13
261
1
原创 整数二分(Acwing)
if (q[l]!//如果无解,则会返回第一个大于等于x的数。)/2:如果l=r-1且check mid 为true,l=mid=l (下取整) 相当于没有更新。check (mid)是否满足绿色区间的性质。check (mid)是否满足红色区间性质。(1)目的:二分红色区间右端点。(2)目的:二分绿色区间左端点。此处注意mid=(l+r。
2024-04-15 23:30:29
254
1
原创 归并排序(Acwing)
合并过程中我们可以保证如果两个当前元素相等时,我们把处在前面的序列的元素保存在结果序列的前面,这样就保证了稳定性(例如举例中的5,一般来说先取左半段的5再取右半段的5),O(n):左指针扫描左半段,右指针扫描右半段,因此每个元素仅会被扫描一次。存成PII,即存a[i]和下标i,从而保证每个元素都不相同。2.递归排序:以中点为分界点的左右两段分别排序。//这里相当于(l+r)/2 步骤一。左半段:1 3 5 7 9。1.确定分界点:取区间的中点。右半段:2 4 5 8 10。
2024-04-15 22:30:37
264
1
原创 排序算法(Acwing)
1.确定分界点:q[l],q[(l+r)/2],q[r],随机一点。2.调整区间:=x的放右边。//保证使指针先向中间移动一格,再做判断;/*递归处理左右两段*/3.递归处理左右两段。
2024-04-14 18:13:13
230
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人