刷题
文章平均质量分 57
刷题
seth25
这个作者很懒,什么都没留下…
展开
-
【刷题】数据结构——树状数组:楼兰图腾
想要快速求出一个区间有多少个数,每出现一个数在相应位置+1,然后用前缀和即可。初始集合为空,从左往右扫描一遍,对于每个位置i,求出当前集合有多少数大于yi,即区间[yi+1, n]有多少个数,然后将yi加入集合中;二维坐标轴上有n个点,横坐标分别为1~n,需要找出所有满足高低高和低高低的三元组,求这些三元组的数量。低高低同理,求多少个数小于yi,换成区间[0, yi-1],也就是sum(yi-1)即可。初始集合为空,再从右往左扫描一遍,求出当前集合有多少数大于yi,然后将yi加入集合中。原创 2024-03-31 21:37:26 · 381 阅读 · 0 评论 -
【刷题】搜索——BFS:抓住那头牛
由于两种移动方式移动都只花费相同时间,所以从起点开始bfs,枚举两种方式走法加到队列里即可。的右侧时,必然要往左走,不可能先往右再往左,而k最大是1e5,农夫至多在2e5的位置。注意移动范围并不在1e5内,例如牛在100000处,农夫在50001处,则最优解是。原创 2023-02-21 00:01:15 · 207 阅读 · 0 评论 -
【刷题】搜索——BFS:武士风度的牛
和普通走迷宫不同,该题是以象棋🐎的形式走的。原创 2023-02-20 23:07:39 · 164 阅读 · 0 评论 -
【刷题】搜索——BFS:迷宫问题【最短路模型模板】
tips:要想打印起点到终点的路径,可以从终点向起点搜索,这样pre数组记录的方向就是起点向终点。记录路径可用一个pre数组,新节点进队时记录该节点的pre节点是队头元素。由于bfs的特性,从起点开始搜索时,一旦搜到终点,就是最短路径。原创 2023-02-20 20:43:38 · 236 阅读 · 0 评论 -
【刷题】搜索——BFS:山峰和山谷
【代码】【刷题】搜索——BFS:山峰和山谷。原创 2023-02-20 14:16:05 · 99 阅读 · 0 评论 -
【刷题】搜索——BFS:城堡问题(The Castle)【Flood Fill、并查集】
找出房间个数——>求连通块个数最大房间——>求最大连通块直接用flood fill算法注意题目的输入,例如11821,则代表有西、北、南墙。原创 2023-02-14 00:40:18 · 273 阅读 · 0 评论 -
【刷题】搜索——BFS:池塘计数【Flood Fill模板】
常用于在线性时间内寻找连通块。大致思想如下:在一大块土地上,有若干高地(灰色的格子),现在往土地上的某个格子倒洪水,水只会在低处蔓延(白色格子),无法覆盖高地。水在每一个时间单位只会向周围(上下左右,左上、左下、右上、右下)蔓延一格。时间1:时间2:时间3:每个时间单位,相当于宽搜的一层搜索。一开始队列里只有开始倒水的格子,然后将周围格子加到队列,再将把新加进来格子周围的格子加进队列。当没有新格子进来时,这部分就是连通块。注意覆盖后要对格子进行标记,防止重复覆盖。原创 2023-02-13 16:14:24 · 212 阅读 · 0 评论 -
【刷题】数学知识——博弈论:移棋子游戏
移棋子游戏该游戏是一个有向图游戏,每个棋子都是互相独立的,所以可以看成K个相同的棋盘,每个棋盘上有1个棋子。这样问题就转化成K个有向图游戏,求有向图游戏的和即可。即每个棋子的SG函数互相异或是否为0。注意实际遍历时只要求一张图的SG函数值,由于是有向无环图而不是树,可能有多个起点,每个起点都要进行一遍搜索。...原创 2022-07-13 00:27:43 · 826 阅读 · 0 评论 -
【刷题】数学知识——博弈论:NIM游戏
博弈论的游戏主要分为:公平组合游戏:游戏有两个人参与,二者轮流做出决策,双方均知道游戏的完整信息;任意一个游戏者在某一确定状态可以作出的决策集合只与当前的状态有关,而与游戏者无关;游戏中的同一个状态不可能多次抵达,游戏以玩家无法行动为结束,且游戏一定会在有限步后以非平局结束。非公平组合游戏在非公平组合游戏中,游戏者在某一确定状态可以做出的决策集合与游戏者有关。大部分的棋类游戏都不是公平组合游戏,如国际象棋、中国象棋、围棋、五子棋等(因为双方都不能使用对方的棋子)。反常游戏胜者为第一个无法行动的玩家原创 2022-07-11 23:55:46 · 2356 阅读 · 0 评论 -
【刷题】数学知识——容斥原理:能被整除的数
集合SSS由三个互相重叠的集合S1,S2,S3S_1,S_2,S_3S1,S2,S3组成,则S=∣S1∣+∣S2∣+∣S3∣−∣S1∩S2∣−∣S1∩S3∣−∣S2∩S3∣+∣S1∩S2∩S3∣S=|S_1|+|S_2|+|S_3|-|S_1\cap S_2|-|S_1\cap S_3| - |S_2\cap S_3| +|S_1\cap S_2\cap S_3|S=∣S1∣+∣S2∣+∣S3∣−∣S1∩S2∣−∣S1∩S3∣−∣S2∩S3∣+∣S1∩S2∩S3∣这是因为当某原创 2022-07-08 22:42:34 · 218 阅读 · 0 评论 -
【刷题】数学知识——扩展欧几里得:线性同余方程、求逆元
利用扩展欧几里得原创 2022-07-03 20:12:40 · 234 阅读 · 0 评论 -
【刷题】数学知识——扩展欧几里得、裴蜀定理
裴蜀定理扩展欧几里得原创 2022-07-03 17:07:54 · 278 阅读 · 0 评论 -
【刷题】数学知识——快速幂:快速幂求逆元
快速幂求逆元原创 2022-07-03 01:13:58 · 272 阅读 · 0 评论 -
【刷题】数学知识——快速幂
快速幂原创 2022-06-04 23:10:27 · 148 阅读 · 0 评论 -
【刷题】数学知识——欧拉定理
欧拉定理原创 2022-06-04 22:17:38 · 343 阅读 · 0 评论 -
【刷题】数学知识——欧拉函数:线性筛法求多个数的欧拉函数
线性筛 欧拉函数原创 2022-06-04 19:43:00 · 301 阅读 · 0 评论 -
【刷题】数学知识——欧拉函数
欧拉函数ϕ(n)\phi(n)ϕ(n):表示1~n中与n互质的数的个数例如ϕ(6)=2\phi(6)=2ϕ(6)=2,因为1 2 3 4 5 6中只有1和5跟6互质。求ϕ(n)\phi(n)ϕ(n)方法如下:当n=p1a1∗p2a2∗...∗pkakn=p_1^{a_1}*p_2^{a_2}*...*p_k^{a_k}n=p1a1∗p2a2∗...∗pkak时,其中ppp均为质数ϕ(n)=n∗(1−1/p1)∗(1−1/p2)∗...∗(1−1/pk)\phi(n)=n*(1-1/p_1原创 2022-05-30 22:02:06 · 494 阅读 · 0 评论 -
【刷题】数学知识——约数:最大公约数【辗转相除/欧几里得算法】
根据常识我们知道,如果ddd能整除aaa,ddd也能整数bbb,显然ddd能整除ax+byax+byax+by,其中xxx和yyy是整数。即若d∣ad|ad∣a且d∣bd|bd∣b , 则d∣(ax+by)d|(ax+by)d∣(ax+by)而a%ba\%ba%b可以写成a−⌊a/b⌋∗b=a−c∗ba-\lfloor a/b \rfloor * b=a-c*ba−⌊a/b⌋∗b=a−c∗b,所以ddd能整除a%ba\%ba%b下面证明 aaa、bbb的最大公约数 等于 bbb、a%ba\%ba%b.原创 2022-05-16 18:14:27 · 198 阅读 · 0 评论 -
【刷题】数学知识——约数:求约数之和
假设一个数n可以拆成n=p1a1∗p2a2∗...∗pkakn=p_1^{a_1} * p_2^{a_2} *...*p_k^{a_k}n=p1a1∗p2a2∗...∗pkak,其中p是质数,如36=22∗3236=2^2*3^236=22∗32,那么约数的和就是(p10+p11+...+p1a1)∗(p20+p21+...+p2a2)∗...∗(pk0+pk1+...+pkak)(p_1^0+p_1^1+...+p_1^{a_1})*(p_2^0+p_2^1+...+p_2^{a_2}).原创 2022-05-16 17:43:33 · 1459 阅读 · 0 评论 -
【刷题】数学知识——约数:试除法求约数
约数是成对出现的,如6=2*3,知道小的约数2同时也能知道大的约数3,那么枚举时只需要枚举到n\sqrt nn即可。#include <iostream>#include <algorithm>#include <vector>using namespace std;int n;vector<int> get_divisors(int a) { vector<int> res; for (int i = 1; i *.原创 2022-05-13 22:48:41 · 215 阅读 · 0 评论 -
【刷题】贪心——Huffman树:合并果子
基本概念路径:在一棵树中,一个结点到另一个结点之间的通路,称为路径。下图中,从根结点到结点 a 之间的通路就是一条路径。路径长度:在一条路径中,每经过一个结点,路径长度都要加 1 。例如在一棵树中,规定根结点所在层数为1层,那么从根结点到第 i 层结点的路径长度为 i - 1 。下图从根结点到结点 c 的路径长度为 3。结点的权:给每一个结点赋予一个新的数值,被称为这个结点的权。下图中结点a的权是1。结点的带权路径长度:指的是从根结点到该结点之间的路径长度与该结点的权的乘积。下图中结原创 2022-02-25 22:57:54 · 505 阅读 · 0 评论 -
【刷题】基础算法——基数排序【模板】
以一个数为基数 bbb,然后第 kkk 次按照在 bbb 进制下的第 kkk 位来排序。例如有121212 个数:13 23 34 27 19 37 43 22 11 9 21 40取 b=10b=10b=10,也就是十进制。当 k=1k=1k=1 时,排序结果如下:40 11 21 22 13 23 43 34 27 37 19 9现在这些数已经按照个位排好序了,接下来,当 k=2k=2k=2时,排序结果如下:9 11 13 19 21 22 23 27 34 37 40 43这时候,由于原创 2022-02-25 22:47:32 · 569 阅读 · 0 评论 -
【刷题】贪心——区间问题:区间覆盖
文章目录模型算法正确性代码实现模型给定N个闭区间[ai,bi][a_i, b_i][ai,bi]以及一个线段[s,t][s,t][s,t],选择尽量少的区间,将线段完全覆盖。第一行输入整数s和t,代表线段两个端点第二行输入整数N,表示区间数接下来N行输入整数ai,bia_i, b_iai,bi,表示区间两个端点输出一个整数,表示最少区间数如果无解则输出-1数据范围:1≤N≤1051 \leq N \leq 10^51≤N≤105−109≤ai≤bi≤109-10^9 \leq原创 2022-02-24 00:23:25 · 1025 阅读 · 0 评论 -
【刷题】贪心——区间问题:区间分组
文章目录模型算法正确性代码实现模型给定N个闭区间[ai,bi][a_i, b_i][ai,bi],将区间分成若干组,使每组内的区间两两(包括端点)没有交集。求组数的最小值。输入N,表示区间数接下去N行,每行包括 a i , b i a_i, b_i ai,bi,表示一个区间的两个端点。1≤N≤1051≤N≤1051≤N≤105−109≤ai≤bi≤109-10^9\leq a_i \leq b_i \leq 10^9−109≤ai≤bi≤109输出组数的最小值算法将区间按左端原创 2022-02-23 22:06:48 · 668 阅读 · 0 评论 -
【刷题】贪心——区间问题:最大不相交区间
给定N个闭区间[ai,bi][a_i, b_i][ai,bi],在数轴上选若干区间,使得选中的区间之间互不相交(包括端点)。求可选取区间的最大数量输入N表示区间数接下去N行,每行包括ai,bia_i, b_iai,bi,表示一个区间的两个端点。1≤N≤1051\leq N \leq 10^51≤N≤105−109≤ai≤bi≤109-10^9\leq a_i \leq b_i \leq 10^9−109≤ai≤bi≤109算法:将区间按右端点从小到大排序,依次枚举每个区间。如果原创 2022-02-23 20:53:42 · 779 阅读 · 0 评论 -
【刷题】贪心——区间问题:区间选点
数轴上有n个闭区间[ai,bi][a_i,b_i][ai,bi]。选择尽量少的点,使得每个区间内都至少有一个选择的点。算法:将区间按右端点从小到大排序,依次枚举每个区间。如果区间包含点:跳过如果区间不包含点:将点放在区间右端点。正确性:设算法得到的点的个数是A,最优解得到点的个数是BA≥BA \geq BA≥B:因为每个区间都包含点,因此A是合法解,最优解显然不超过合法解。B≥AB \geq AB≥A:按照算法选出来的放点的区间,一定是两两没有交集的,否则这个区间会包含上个区间放原创 2022-02-23 20:10:14 · 426 阅读 · 0 评论 -
【刷题】动态规划——线性DP:编辑距离
设f[i,j]f[i, j]f[i,j]:将a[1,2,...,i]a[1,2,...,i]a[1,2,...,i]变成b[1,2,...,j]b[1,2,...,j]b[1,2,...,j]的操作的最小数。删a[i]a[i]a[i]:f[i, j] = f[i - 1, j] + 1需要a[1,2,...,i−1]a[1,2,...,i-1]a[1,2,...,i−1]和b[1,2,...,j]b[1,2,...,j]b[1,2,...,j]相同,这样删除a[i]a[i]a[i]后aaa和bbb相.原创 2022-02-10 02:12:25 · 775 阅读 · 0 评论 -
【刷题】图论——二分图:匈牙利算法【模板】
O(mn)O(mn)O(mn)原创 2022-02-08 04:20:56 · 979 阅读 · 0 评论 -
【刷题】图论——二分图:染色法【模板】
O(m+n)O(m+n)O(m+n)原创 2022-02-08 02:02:46 · 1231 阅读 · 0 评论 -
【刷题】图论——最小生成树:Kruskal【模板】
算法步骤将所有边按边权从小到大排序 O(mlogm)O(mlogm)O(mlogm)枚举每条无向边(u, v) O(m)O(m)O(m)如果u和v不连通,将这条边加入集合中算法实现题目链接#include <iostream>#include <algorithm>using namespace std;const int N = 10005, M = 500005, INF = 0x3f3f3f3f;int n, m, p[N];struct原创 2022-02-08 00:37:17 · 814 阅读 · 0 评论 -
【刷题】图论——最小生成树:Prim【模板】
文章目录1、朴素版Prim O(n^2)1.1、算法步骤1.3、算法实现堆优化版Prim O(mlogn)假设图有n个点m条边1、朴素版Prim O(n^2)通常用于稠密图。1.1、算法步骤初始化所有点的dis[i]=∞dis[i]=\inftydis[i]=∞,S为空集for(i=0;i<n;i++)for (i=0; i < n; i ++ )for(i=0;i<n;i++)找到不在集合S中,dis最小的点x。(S为空集则随便找一个点)x加入S中用x更新S外的点到原创 2022-02-08 00:14:42 · 719 阅读 · 0 评论 -
【刷题】图论——最短路:Floyd【证明+模板】
定义图有:n个点,m条边 。这Floyd算法是处理多源最短路的算法,可以应对边权为负的情况,但不能处理负环。时间复杂度是O(n3)O(n^3)O(n3)算法步骤for(k=1;k<=n;k++)for(k = 1; k <= n; k ++ )for(k=1;k<=n;k++)for(i=1;i<=n;i++)for(i = 1; i <= n; i ++ )for(i=1;i<=n;i++)for(j=1;j<=n;j++)for(j = 1;原创 2022-02-06 03:13:31 · 656 阅读 · 0 评论 -
【刷题】图论——最短路:Bellman-Ford、SPFA【证明+模板】
定义图有:n个点,m条边 。这两个算法是处理单源最短路的算法,可以应对边权为负的情况。1、Bellman-Ford O(nm)可以处理限制只经过k条边的最短路问题。2、SPFA 一般O(m)、最坏O(nm)原创 2022-02-06 02:04:02 · 947 阅读 · 0 评论 -
【刷题】图论——最短路:Dijkstra【证明+模板】
文章目录单源最短路边权为正1.1、朴素Dijkstra O(n^2)算法步骤算法证明1.2、堆优化Dijkstra O(mlogn)边权为负2.1、Bellman-Ford O(nm)2.2、SPFA 一般O(m)、最坏O(nm)多源最短路3 Floyd O(n^3)定义图有:n个点,m条边单源最短路边权为正1.1、朴素Dijkstra O(n^2)算法步骤假设起点是st;已经确定到st最短距离的点在集合S中dis[s]=0,(i≠s)dis[i]=+∞dis[s] = 0, (i\neq原创 2022-02-04 04:26:45 · 1910 阅读 · 0 评论 -
【刷题】数据结构——STL【模板】
文章目录1 二元组:pair2 变长数组:vector3 字符串:string4 队列:4.1 queue 普通队列4.2 priority_queue 优先队列4.3 deque 双端队列5 栈:stack6 红黑树(平衡二叉树):6.1 set6.2 map6.3 multiset6.4 multimap7 哈希表:7.1 unordered_set7.2 unordered_map7.3 unordered_multiset7.4 unordered_multimap8 压位:bitset1 二元组原创 2022-02-04 00:31:49 · 1465 阅读 · 1 评论 -
【刷题】数据结构——字符串Hash【模板】
假设有字符串:ABCABCD预处理前缀的哈希值h[0] = ""的哈希值h[1] = "A"的哈希值h[2] = "AB"的哈希值h[3] = "ABC"的哈希值h[4] = "ABCA"的哈希值…哈希值计算方法,转化成P进制。以26个大写字母为例,假设转化成26进制,那么"ABCA"的哈希值就是(1∗263+2∗262+3∗261+1∗260)modQ(1*26^3+2*26^2+3*26^1+1*26^0) mod Q(1∗263+2∗262+3∗261+1∗260)modQ注意不原创 2022-02-03 22:21:52 · 289 阅读 · 0 评论 -
【刷题】数据结构——Hash表【模板】
文章目录(1) 拉链法:(2) 开放寻址法例题基本思想:将一个大范围的数映射到小范围上1、可以采用取模的方式,例如1~109 映射到 1~105,直接x%100000即可。2、取模冲突解决方式:拉链法、开放寻址法(1) 拉链法:开N个链表,N是比数据范围大的质数。冲突的话在对应位置拉一条链,查找时沿着这条链查找例如8%5=3,在3的位置放8;现在来了13,13%5=3,在3的位置拉一条链,链上填13。int head[N], val[N], nxt[N], idx; // 向哈希表中插入原创 2022-02-01 23:16:07 · 376 阅读 · 0 评论 -
【刷题】数据结构——堆【模板】
文章目录堆的原理堆的操作基本的堆带映射堆(可对第k个插入元素操作)堆的原理堆是一个完全二叉树小根堆:父亲比左右儿子小,根节点是最小值小根堆:父亲比左右儿子大,根节点是最大值编号xxx的左儿子:2x2x2x,右儿子:2x+12x+12x+1下标从1开始堆的操作堆的操作主要有两种:down、up以小根堆为例:down:如果编号xxx如果变得比儿子大,则和较小的儿子进行交换,直到放到合适的位置(两儿子都比它大)。up:如果编号xxx如果变得比父亲小,则和父亲交换,直到放到合原创 2022-02-01 18:27:11 · 836 阅读 · 0 评论 -
【刷题】数据结构——并查集:连通块中点的数量【记录集合元素个数】
利用并查集维护连通块。只需在合并之前,如x并到y上,将x的数量加到y的数量上即可。1、cnt[find(y)] += cnt[find(x)]2、p[find(x)] = find(y)#include <iostream>using namespace std;const int N = 100005;int n, m;int p[N], idx, cnt[N];int find(int x) { if (p[x] != x) p[x] = find(p[x].原创 2022-02-01 02:14:47 · 762 阅读 · 0 评论 -
【刷题】数据结构——并查集:格子游戏
题目是寻找第一次成环的时刻。可以用并查集来维护各个点,如果两点间有边,则两点属于一个集合。只要看加上这条边之前两点是否在一个集合,即可判断成环的时刻。因为n只有200,假设坐标编号是0~199,因此用200∗x+y200*x + y200∗x+y就可以不重复的表示所有坐标。又因为每个坐标都可能往下或者往右两种边,因此用400∗x+2∗y+0400*x + 2*y + 0400∗x+2∗y+0和400∗x+2∗y+1400*x + 2*y + 1400∗x+2∗y+1表示向下和向右。(x,y)(x,.原创 2022-01-31 23:35:58 · 3274 阅读 · 0 评论