自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(83)
  • 收藏
  • 关注

原创 第一章-语言基础\2.竞赛常用库函数\最值查找

2025-05-11 21:26:28 116

原创 第一章-语言基础\3.STL

【代码】第一章-语言基础\3.STL。

2025-05-06 14:37:08 476

原创 第一章-语言基础\2.竞赛常用库函数\全排列

【代码】第一章-语言基础\2.竞赛常用库函数\全排列。

2025-04-23 20:12:32 70

原创 第一章-语言基础\2.竞赛常用库函数\其他库函数

memset设置成0和-1是没有问题的 -1是因为在计算机中 -1的补码是11111111111111111111111111111111。unique返回一个指向去重后范围的尾后迭代器 通过erase(it,vec.end())可以删除后续的重复元素。sort的时间复杂度是O(nlogn)的,一般是以sort的时间复杂度来计算算法整体的时间复杂度。memset(a,0x3f,sizeof a) 0x表示16进制,前面四位是3,后面四位是f。这种用法通常在算法中用于初始化距离数组或标记数组等数据结构。

2025-04-22 22:31:16 279

原创 第一章-语言基础\2.竞赛常用库函数\大小写转换

【代码】第一章-语言基础\2.竞赛常用库函数\大小写转换。

2025-04-22 21:46:25 116

原创 第一章-语言基础\2.竞赛常用库函数\排序sort

还可以用greater<int>()函数。

2025-04-22 21:02:49 95

原创 第一章-语言基础 2.竞赛常用库函数 二分查找

巧记lower_bound 和 upper_bound 一个确定上界 一个确定下界。下标= 地址-首地址。

2025-04-21 16:44:17 92

原创 日志统计(C++,模拟,双指针)

由于我们时间段大小是固定的,因此每次时间段的改变只需要减掉开头,尾部加入,所有会有很多的多余操作,所以我们可以用双指针来维护一个区间。枚举每一条帖子,枚举后续每一条帖子,如果id相同且时间差小于d,那么就记录起来,如果记录数量cnt大于K那么就是热帖。先枚举所有的帖子,如果该帖子在时间段内,那么cnt++遍历所有的帖子,t表示该帖子的时间,也是时间段段的开头。

2025-03-16 21:14:38 351

原创 X 进制减法(贪心)

【代码】X 进制减法(贪心)

2025-02-27 14:34:28 189

原创 翻转硬币(思维题,巧用bitset)

这段代码中,是一个非常关键的声明,它定义了一个名为t的bitset对象,大小为 200,000,001 位(即 200,000,001 个布尔值)。bitset是 C++ 标准库中的一个模板类,用于高效地存储和操作位(bit)序列。在 C++ 中,bitset的大小是固定的,必须在编译时确定。因此,中的200000001是必须明确指定的,它表示bitset的大小为 200,000,001 位。如果不写这个大小,编译器会报错,因为bitset的大小是必须的。

2025-02-18 20:29:33 370

原创 字符串\字典树基础

check函数:用于判断某个字符串在trie中的出现次数。insert函数:用于将一个字符串s加入进去。

2025-02-06 16:14:48 215

原创 动态规划·区间DP

枚举区间是从小到大去枚举的 ,例如,一开始i是2,那么就会枚举所有区间长度为2的区间,那么在计算区间长度为3的区间时,它的长度为2的子区间就一定是已经被计算过的了这样就确保了对于一个区间[i,j],它的所有的子区间都是已经被计算过的了分析:对于整个字符串,我们可以考虑把它拆分成若干份子区间对于相邻的两个区间,例如,字符串长度为5,我们可以先考虑把[1,4]区间进行涂色,将对[5,5]进行涂色,这两个区间的操作次数之和就是整个木板的操作次数,也就是说我们可以通过合并两个相邻的子区间得到整个区间。

2025-01-25 17:40:16 342

原创 动态规划基础·LCS(最长公共子序列)

【代码】动态规划基础·LCS(最长公共子序列)

2025-01-21 14:12:10 181

原创 动态规划 动态规划基础 二维DP

【代码】动态规划 动态规划基础 二维DP。

2025-01-17 16:17:34 207

原创 动态规划 动态规划基础 线性dp

dp[i] = prefix[i-k-1] prefix[i]表示i位置的方案数前缀和。发现i位置放桶的方案数等于i-k-1这个位置+在它之前的位置的方案数之和,所以递推方程是。举例 n = 5 , k = 2的情况。

2025-01-16 14:44:04 173

原创 合唱队形(单调队列 dp)

思路:从左到右找最长单调递增子序列,从右到左找最长单调递增子序列,找它俩和的最大值,和-1就是合唱队形人数最大,人数n-合唱队形人数最大就是我们的答案。

2025-01-15 17:04:51 247

原创 整数拼接(哈希表 枚举)

2068. 整数拼接 - AcWing题库

2025-01-03 19:48:13 214

原创 dfs复习

通过添加时间戳,记录该点被遍历的时间,如果下一个点有被添加过时间戳,如果时间戳是大于等于我们的最小时间戳的(等于说明该点自成环),那么成环,环的大小=该点的时间戳-下个点的时间戳+1,返回环大小跳出递归,否则返回0跳出递归。如果四周都为陆地,且该岛屿没有被记录,那么保留岛屿数++,且标记一下该岛屿被记录。通过深搜,去找到该点指向的下一个点,然后返回所成的环的大小,保留最大的环的大小。dfs,往四个方向去递归,如果下个块染过或是海洋则跳过,否则递归下去。2️⃣遍历地图,如果一块地四周没有海洋,那么就保留。

2025-01-02 15:09:27 428

原创 位运算(知识点+例题)

根据位运算的结合律,自反性,零元素,可以证明pre[r]^pre[l-1]=a[l] ^ a[l+1] ^ ... ^ a[r-1] ^ a[r]根据试除法,一个数x,如果√x是整数,那么因数个数就是奇数个,否则为偶数个,即完全平方数的因子个数奇数个,非完全平方数的因子个数为偶数个。后更新一下大小为prexor[i]的个数,cnt[prexor[i]]++ 这就是新增的prexor[j]先枚举所有的prexor[i],再枚举所有的sq (0的平方到200的平方)要求有多少个子数组的异或和为完全平方数。

2024-12-30 13:19:34 418

原创 贪心算法(常见贪心模型)

如果每次选择代价最小的两个部落合并,不仅可以使得当前代价最小,还可以使得后续合并的代价也尽可能小。1️⃣字符串全相等(假设全a),那就尽量使得每个人分到的字符串的最大长度尽可能小,即平分字符串。2️⃣s[x] == s[1] 说明第x个是最小的字符,让它带着后面所有的字符一起输出即可。= s[1] ,后面一坨字符直接丢到s[1]后面,分给 第一个同学即可。所以我们先去找最大和最小的,如果不能打包,则去找次小的,直到能打包成一组。怎样的两个纪念品最有可能打包成一组呢,无疑是一个大和一个小的。

2024-12-26 21:06:09 866 1

原创 双指针(可以将暴力的O(n^2)优化到O(n))

这是一段区间,如果l左移,sum减小,r右移,sum增大。一旦sum>=s,那么r就固定,右移l ,找到最短区间。如果sum

2024-12-26 16:41:20 163

原创 前缀和(知识点+习题)

计算量 (n-R+1) * (m-R+1) <= 5000^2 ==> 2.5 * 10 ^ 7 < 1 * 10^8。在一个二维的矩阵中,会有n个价值为Wi的点,给我们一个爆炸范围是边长R的炸弹,我们要去求可以摧毁的最大价值是多少。因为我们要枚举的爆炸区域是一个R*R的区域,否则我们枚举的就是一个(R+1)*(R+1)的区域。右下角坐标是(i,j),左上角的坐标是(i-R+1,j-R+1) 而不是(i-R,j-R)所以,我们可以爆破的范围是R*R,而不是(R+1)*(R+1)这样可以爆破的范围最大。

2024-12-26 13:37:25 284

原创 模拟题合集

收集了一些经典的模拟题

2024-12-25 13:20:37 974

原创 回文日期(模拟,日期问题)

【代码】回文日期(模拟,日期问题)

2024-12-23 23:30:39 237

原创 费解的开关(bfs + 哈希表 or 递推)

25盏灯排成一个5x5的方形。每一个灯都有一个开关,游戏者可以改变它的状态。每一步,游戏者可以改变某一个灯的状态。游戏者改变一个灯的状态会产生连锁反应:和这个灯上下左右相邻的灯也要相应地改变其状态。我们用数字“1”表示一盏开着的灯,用数字“0”表示关着的灯。

2024-12-18 16:11:53 666

原创 递归实现排列型枚举(全排列,枚举)

第一个空位上除了填过的 1,2,还可以填 3。剩余第三个空位没有填数。第三个空位上除了填过的 1,2,没有其他数字可以填。第三个空位上除了填过的 3 ,没有其他数字可以填。第三个空位上除了填过的 3,没有其他数字可以填。第一个空位上除了填过的 1,2,3,没有其他数字可以填。第二个空位上除了填过的 2,3,没有其他数字可以填。第二个空位上除了填过的 1,3,没有其他数字可以填。第二个空位上除了填过的 1,2,没有其他数字可以填。假设有 3 个空位,从前往后填数字,每次填一个位置,填的数字不能和前面一样。

2024-12-18 11:25:55 677

原创 递归实现指数型枚举(递归)

当层数大于我们n时,去判断每个数字的选择情况,输出被选的数字。我们把每个数看成每层,可以画出一个递归搜索树。每个数有选和不选两种情况。dfs传入一个u表示层数。叶子节点就是我们的答案。很容易写出每dfs函数。

2024-12-18 11:04:32 451

原创 飞行员兄弟(枚举 位运算)

比如0000 0000 0000 0000就表示对所有的都不操作,1111 0000 0000 0000 0000表示对第一行全部进行操作。反正我们最终的解,也就是经过多次操作得到的结果也可以用这么一串数字表示。所以最外层for循环,就是遍历这么一个过程:从0000 0000 0000 0000到1111 1111 1111 1111,也就是0 到1<<16`(用位运算表示了而已)。所以不妨将操作一次的记为1,不操作的地方记为0。turn_all函数表示改变某个点的状态以及它所在的行和列的点的状态。

2024-12-18 10:39:46 268

原创 单链表(数组模拟)

用数组来模拟的话,需要两个数组,通过下标关联起来。

2024-12-11 23:20:28 261

原创 交换瓶子(图论 贪心)

初始的时候我们假设有k个环,n个点,我们的目标是将所有的环拆解成自环,每次操作最多增加一个环,因此次数 >= n-k次,只要有一个环里面存在两个或以上的点,我们就必然可以把它分裂一下,变成两个环,所以必然存在一种方案,可以使我们恰好操作n-k次就可以把k个环分解成n个环。如图,交换1 和 3的位置,意味着改变点1和点2的出边,让点1的出边指向点2先前出边方向,点2指向点1 先前出边的方向。因为每个点会指向它应该在的位置的那个点,他所在位置的对应的点会指向他,所以每个点的出度和入度都为1。

2024-12-10 21:19:21 730

原创 归并排序(总结)

因此,我们只需要在q[j] < q[i] 的时候,记录一下,左半边大于q[j]的数的数量 Sj = mid - i + 1。要求生气和最小,小朋友生气值的提升简单的+1 ,是一个平方级别的,所以需要考虑一下分配问题。每个逆序对都算了两边,最后k1 + k2 的和/2 = 该数组逆序对的数量。这是因为每次交换相邻两个逆序对,逆序对只会减少1,其他数的相对位置是不变的。冒泡本身的思想是逆序对,数组有k个逆序对,就需要交换k次才能成为有序数组。求每个数对应的逆序对的数量,假设k1 是 该数左边大于它的数的数量。

2024-12-10 11:57:31 272

原创 bfs宽搜

题目1: 1101. 献给阿尔吉侬的花束 - AcWing题库题目2:1096. 地牢大师 - AcWing题库

2024-12-07 20:03:17 190

原创 油漆面积(扫描线法 + 线段树 C++)

区间的个数要比点的个数少一。

2024-11-29 15:53:59 289 1

原创 小朋友排队

每个小朋友不开心值不是交换k次就是k ,而是一个差不多平方的级别,我们需要考虑一下分配的问题。对于每个数而言,它的交换次数 >= 它前面比它大的数量k1 + 后面比他小的数量k2。每一个逆序对都算了两次 所以 == 2k。那交换次数k1+k2 可以取相等吗?统计一下所有的k1 + k2。举例3 2 5 4 1。

2024-11-27 23:46:09 195

原创 四平方和 (二分 哈希)

其实我们只需要枚举三个数abc ==》 d = √N-a^2-b^2-c^2。1️⃣因此我们最多可以枚举两个数。√N 大概等于 2200。

2024-11-26 22:28:49 253

原创 线段树与树状数组 (C++)

树状数组:线段树阉割掉了一些点,空间比线段树小,时间一样,维护具有结合律和可拆分信息,如加法(和) 、乘法 (积)、异或等。从根节点进入,如果该节点的区间被所查询的区间覆盖了,就直接返回sum ,否则根据左右子节点的重叠情况去往下去递归。线段树:基于分治思想的二叉树,用于维护区间信息(区间和,区间最值等),区间修改和区间查询的时间复杂度为logn。要记住他的三个基本操作 lowbit,add(向后),query(向前)l,r为区间左右端点,sum为区间和。:是一个结构体,包含l,r,sum。

2024-11-26 17:02:54 259

原创 数列区间最大值(线段树 C++)

构建树时,maxV = max(tr[u<<1].maxV,tr[u<<1|1].maxV)10^6,线段树本身的操作数量不是很多的还是勉强能去做的。把结构体中的区间和sum改成区间最大值maxV。线段树能解决的问题数据范围大部分在10^5。查询时取左右子树的maxV最大值。这题就是线段树的简单应用。

2024-11-26 16:31:00 245

原创 数星星 (C++ 树状数组)

星星是按纵坐标递增给我们的,如果纵坐标相同,就按横坐标来给。星星的等级由它左下角(包括左边和下边)的星星个数来决定的。观察到一个边插入边求前缀和的数据结构,想到了树状数组。题目要求我们去求每个等级的星星各有多少个。所以星星是从低到高,一行一行来给的。1️⃣在某个位置上A[i]+1。2️⃣求A1 ~ Ax的前缀和。

2024-11-26 14:34:22 312

原创 牛牛VS牛妹

来源:牛客网。

2024-11-26 11:51:02 269

原创 二分题目合集(方程问题)

这两道题目的解法都是二分,找l r之间是否有解,解的保留位数不同,如果根据保留位数来设定寻找的范围,如要求解保留4位小数,则 while(r-l > 1e-5) 格式化输出为printf("%4.lf\n",mid)

2024-11-25 23:23:17 264

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除