自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Codeforces Round 968 (Div. 2)

反思:这一次下午写的觉得脑子不太清醒,第三题卡的时间太长了,导致第四题都没有时间想了。

2024-09-11 18:49:47 504

原创 Codeforces Round 969 (Div. 2)

一开始我这个题也没有思路,但经过大量的找规律,就发现a和b的最大公约数与这个题有关,所以就找到了一种规律吧,先求一下a和b的最大公约数,然后把数组求余最大公约数,再把数组排序,让mi等于极差,然后再遍历一下数组,把m[i]加最大公约数减m[i+1]与mi求最小值,最后mi就是结果。我们只需要找到原始数组里面的最大值,如果最大值在区间,就改变最大值加1或减1最后输出就最大值就好了。给你一个数组,给你一个区间,如果数组里面值满足区间,就进行加1或减1操作。

2024-09-10 22:12:47 454

原创 树状数组算法

lowbit这个函数的功能就是求某一个数的二进制表示中最低的一位1,举个例子,x = 6,它的二进制为110,那么lowbit(x)就返回2,因为最后一位1表示2。2.树状数组的作用被线段树完全涵盖, 凡是可以使用树状数组解决的问题, 使用线段树一定可以解决, 但是线段树能够解决的问题树状数组未必能够解决.看下图我们会发现,数组的下标其实是有规律的,就比如下标为1,3,5,7的二进制最后一位1都是2。然后她再给你一个下标x,和一个数y让你执行操做1,就可以执行这样的操作。就比如他给你一个数组个数为n。

2024-08-23 17:04:21 1526

原创 最短路问题总结

本文介绍了几种常见的图论最短路径算法,包括朴素的Dijkstra算法适用于稠密图,堆优化后的Dijkstra算法适合稀疏图,Bellman-Ford算法能处理负权边但需检查负环,SPFA算法是Bellman-Ford的一种优化,以及Floyd算法用于求解多源汇的最短路径问题。每个算法都提供了详细的更新过程和代码实现。具体讲解看我之前博客。

2024-08-22 17:36:45 382 1

原创 SPFA(最短路问题)

SPFA算法是求解单源最短路径问题的一种算法,由理查德·贝尔曼(Richard Bellman) 和 莱斯特·福特 创立的。有时候这种算法也被称为 Moore-Bellman-Ford 算法,因为 Edward F. Moore 也为这个算法的发展做出了贡献。它的原理是对图进行V-1次松弛操作,得到所有可能的最短路径。其优于迪杰斯特拉算法的方面是边的权值可以为负数、实现简单,缺点是时间复杂度过高,高达 O(VE) 其中V是节点数量,E是边数量。但算法可以进行若干种优化,提高了效率。

2024-08-22 17:28:41 411

原创 Floyd算法(最短路问题)

Floyd算法是一种用于找出加权图中所有顶点间最短路径的动态规划方法。它通过逐步考虑每个顶点作为中转点,检查是否有更短路径。算法首先初始化一个权值矩阵,然后通过三层循环更新矩阵,直到找到最终的最短路径。文章提供了算法实例和代码实现,并指出Floyd算法能处理负权边但不能处理负环图,适用于小规模问题。

2024-08-21 09:39:39 312

原创 迪杰斯特拉算法(最短路径问题)

算法特点:迪杰斯特拉算法可以算出从一个顶点到其余各顶点的最短路径,解决的是有权图中最短路径问题。

2024-08-20 10:04:39 408

原创 并查集(保姆级讲解)

并查集是一种树形的数据结构。支持两种操作**查找:**确定某个元素在那个集合**合并:**将两个集合的元素合并在一起。

2024-08-18 17:45:09 846

原创 背包九讲(求方案数,求具体方案数,有依赖背包)

有依赖关系的背包问题,他的每一个物品的选择情况都有其子节点的选择情况构成,而子节点的选择情况又由父节点决定(父节点如果不选,则所有子节点都选不了)。给定n 个物品,以及一个容量大小为m 的背包,然后给出n个物品的体积及价值,求背包最大价值是多少,也就是选择总体积不超过m 的物品,然后使总价值最大。给定n nn个物品,以及一个容量大小为m mm的背包,然后给出n nn个物品的体积及价值,求背包最大价值是多少,也就是选择总体积不超过m mm的物品,然后使总价值最大。如果选择一个物品,则必须选择它的父节点。

2024-08-16 18:01:30 549

原创 背包九讲(混合背包,分组背包)

给定n nn个物品,以及一个容量大小为m mm的背包,然后给出n nn个物品的体积及价值,n个物品是分为若干组,每组最多只能选择一个物品。求背包最大价值是多少,也就是选择总体积不超过m mm的物品,然后使总价值最大。这道题其实也就看着复杂,其实就是把三种背包问题放一起了。我们来分析一下,上面讲多重背包的时候,通过二进制优化,将多重背包分解为01背包来写,那么现在就变成了两种背包问题混合了,那么怎么处理呢?简单来说就是多重背包与完全背包的混合,也就是说既存在可以无限获取的物品,也存在获取上限的物品。

2024-08-15 17:08:02 199

原创 Turtle and an Infinite Sequence

所以只要求这一段的或运算和就行了,至于快速或运算的模版直接背下。不知道为什么会有找规律这种nt题型。​ ,如果我们多写几步:再a。首先每一秒都会发生a。

2024-08-13 19:37:30 219

原创 背包九讲(多重背包问题)

多重背包我们其实可以看成为01背包和完全背包的组合。也可以把多重背包问题只转换成01背包问题,我们一起来看看解题思路。

2024-08-13 16:12:48 1038

原创 背包九讲(01背包,完全背包,二维费用的背包)

完全背包与01背包不一样的是:完全背包中的物品都可以无限次的取,而01背包中的物品只可以取一次,所以完全背包问题中的集合划分会比01背包问题的集合划分多的多的多。如果第i件物品放入背包,则背包容量还剩j-v[i],所以要取前i-1件物品放入背包剩余容量j-v[i]所获得的最大价值f[i-1][j-v[i]]。2.2 如果第i件物品放入背包,则f[i][j]=f[i-1][j-v[i]]+w[i]1.如果当前背包容量j

2024-08-12 19:20:25 533

原创 虫洞操纵者

当时比赛的时候我就想起用BFS写但没有思路,然后看了别人写的才知道,就是我们一开始可以先把数组处理一下让数组异或1,异或之后0就变成可以走的路,1就变成了墙和边界,然后我们就正常的按BFS套路走,在每一个位置都遍历上下左右四个方向,如果遇见1就回溯直到再遇见下一个位置是1的点,如果这个点没有被遍历过就入队,直到找到(n,n)就行了。这个题是牛客周赛上的一道题。

2024-08-12 17:24:28 180

原创 河南萌新联赛2024第(四)场:河南理工大学

先把至少要分配几人用总数减去,然后再把剩下的人分配到岗位上有几种分配方法,岗位可以分配0人,然后用排列组合的方法就能求出来,大家可以看下边图片就可以得到公式了。有众多志愿岗位需要被分配,给你志愿者人数和一个数组数组中的值是每个地方要分配的最小值,求可能的分配情况总数。直接模拟一遍就行了,遇见数子存起来,遇见加号求和,再把数字用数组存起来排序输出就行。给以一个字符串,字符串只有数字和加号,输出从大到小写下自己的算式并算出答案。给你n个数输出一个整数,这个整数是在这个数组任意两个数同或的最大值。

2024-08-08 09:35:44 659

原创 Codeforces Round 963 (Div. 2)

如果数组直接是全奇数或全偶数就输出0,反之就把所有的偶数变成奇数,因为奇数加偶数等于技术但偶数加偶数还等于偶数,所以先求出最大的奇数再与比它小的偶数相加,操作数加1,如果偶数比奇数大,就让奇数加最大的偶数再进行操作,操作数加2。可以先找到第一次亮灯最大的时候,让其他亮灯的时候加n个2k使与第一次亮灯最大的时候最接近,然后再排序,如果最大值减最小值大于等于k就输出-1,反之输出最大值。n个灯,每k次变化一次开关状态。就是给你一个数n和一个字符串,字符串中只有ABCD四种字符,求不超过n各种字符的和。

2024-08-05 17:06:49 591

原创 河南萌新联赛2024第(三)场:河南大学

每个用户有仅属于自己的一些公钥然后是 q 次查询,每次查询给出一个用户名,一个 IPv4 地址以及此次登录使用的私钥,要求你判断该 IPv4 地址对应的主机上的用户,是否拥有这个私钥对应的公钥。给定一个n×n 的卷积核和一个m×m 的矩阵。我们知道异或符号定义是二进制位相同就是0反之就是1,我们把每次加1与前面进行异或操作,得到的1的个数就是二进制变化的位数,然后我们可以用bitset来求1的个数,然后这个题的数据范围比较大,我们可以先把1~2e6的异或1的个数进行前缀和预处理,然后用的时候直接输出就行。

2024-07-31 18:32:06 661

原创 bitset用法

这个题用bitset做比较简单,可以定义两个bitset,a,b然后让其中一个b[0]=1,然后让b左移每个数的平方个位置,再让a,b求|和最后得到的b数组中1的个数就是种类数。跟上题一样也是先求bitset的数组,得到数组在从target向上向下模拟,看b数组是否为1,最先为1的必定与target最少相差最少。这一题跟上一题差不多给你n个数组,从每个数组随机选一个数,然后求每个数和与target(题目给得一个数)最少相差最少。给你n个数组,从每个数组随机选一个数,然后求每个数的平方和有几种。

2024-07-29 18:01:08 296

原创 常用STL容器函数

find()(从开头开始查找)和rfind()(从末尾开始查找)查找函数。empty() 如果队列空则返回true反之返回false。front() 返回队列中的第一个元素。back() 返回队列中最后一个元素。push() 在队尾插入一个元素。size() 返回队列中元素个数。pop() 删除队列第一个元素。这个容器可以自动排序和去重。substr()截取函数。insert()插入函数。erase()删除函数。erase()删除函数。

2024-07-25 19:32:48 363

原创 河南萌新联赛2024第(二)场:南阳理工学院

这一次比赛中间的题都是大模拟,用stl容器比较多,而我stl用的不好导致模拟题没写出来,当时连两个容器一起怎么遍历都不知道,别说写了,赛后我要好好学一下容器,要不然只用数组对于一些大模拟题太吃亏了。

2024-07-25 18:34:23 1298 5

原创 vector(STL)

typename是类型名。

2024-07-24 19:59:21 296

原创 求组合数(三种模板)

这个题肯定不是暴力写的,而是要找规律,然后我先打表看一下。这个方法比较暴力数据范围2000以内可用。i是偶数的和,我们看到n<=10。然后我又打表发现奇数和也是2。还有这样一个题求n以内C。看此题不难发现规律就是2。,然后用快速幂求解就行了。

2024-07-23 09:26:50 393

原创 Codeforces Round 960 (Div. 2)

这次比赛比上一次打的还要失败,当时第一题是一个博弈,先wa了一发,但是我看了一下发现了bug,改正好后样例明明就过了,但我交了说我第一个样例就没过,我就非常着急,看来半个小时发现数组开小了,但它居然给我报样例错误,非常无语,第一题就写了一个小时,心态直接炸了,然后第二题思路想错了,最后就写了一个题。

2024-07-21 17:07:40 504

原创 最长上升子序列模板(LIS)

,如果范围比较大一点的题就会超时,所以可以用模板2来写二分写的话时间复杂度是O(n*logn)用动态规划来求嗯这里不再过多解释,哔哩哔哩董晓算法老师讲得非常好可以看看。用二分来求嗯这里不再过多解释,这个也是董晓算法老师讲的比较好。用动态规划来写的话时间复杂度是O(n。就是求一个数组的最大上升子序列。

2024-07-19 11:01:29 599

原创 最长公共子序列和最长公共子串模板(LCS)

我觉得这个代码有一些问题,比如给你两个字符串a(abcefg),b(cde),你输入时先输入a再输入b跟先输入b再输入a结果不一样,一个正确一个错误,读者自选看或不看。就是求两个字符串的最长公共子序列。

2024-07-18 19:27:03 325

原创 河南萌新联赛2024第(一)场:河南农业大学

这个题其实我们不用管边数,因为可以无数次删除边,我们先把所有的边都删除,然后连接成两个联通块,我们要使两个联通块的值尽可能相近,这样才能让两个联通块的乘积尽可能大。一开始比赛时我用贪心写的但一直不对,然后结束后看了别人代码暴力直接过了,就是先把数组异域和求出然后再循环数组2重循环1到n/i,就可以过了,可以从n往前倒推,当n是偶数是除2,当n是奇数时-1再除2,如果最后n等于2时特判直接操作+1结束。我们知道除以一个数等于乘以它的倒数,所以就是用有限的t步让他变小,就是尽可能的让a。求用尽可能少的操作让。

2024-07-17 20:14:12 900

原创 Codeforces Round 958 (Div. 2)

根据我的理解,就是要把原数字的二进制上的数字1换成零,例如23的二进制10111。后续的数字如果要符合条件就要在10111有1的地方换成0.例如10110,10101之类的。这个题意思就是可以让l到r中的数合并成一个其中的数,当区间中1的个数大于0的个数就和并成1,反之合并成0,看最后是否能合并成只有一个1。这个题就是要把n改成n个1,我么们不用管题目上怎么分解的,只需要把每次分解成k-1个1和n-k+1就行。我们可以把连续的几个零合并成一个,然后看合并后的0和1的个数,如果1多就能合并反之则不能。

2024-07-16 15:27:55 320

原创 Nim 游戏

个石子,每次都可以将一些k级台阶石子移到下一台阶,移动到地面(0阶)就不能再移动了。当堆数的异或和不等于零时,则必胜 a。当堆数的异或和等于零时,则必败 a。大家可以去哔哩哔哩·看董晓算法讲的。=0时则先手必胜,反之则必败。有n个台阶,第i个台阶有a。2.台阶型Nim游戏。

2024-07-16 14:12:58 361

原创 二叉树的构建,前序,中序,后序遍历

一棵二叉树是结点的一个有限集合,该集合或者为空,或者是由一个根节点加上两棵别称为左子树和右子树的二叉树组成。1.每个结点最多有两棵子树,即二叉树不存在度大于2的结点。2.二叉树的子树有左右之分,其子树的次序不能颠倒。先遍历左节点,再输出这个点的值,最后遍历右节点。先遍历左节点,然后遍历右节点,最后输出值。先输出这个节点的值,再遍历左右子节点。

2024-07-15 17:14:55 508

原创 小红的 gcd

一开始没有思路,就不知道应该怎么把大整数a与这个数b求最大公约数,最后看了别人写的才会写了,就是可以把每一位上的数%b,然后余数再乘10加上下一位数,再求余,最后得到的那个数再与b求最大公约数等于直接a与b求最大公约数。就是给你一个超大整数和一个int类型整数,求最大公约数。

2024-07-15 16:13:32 371

原创 滑动窗口区间最大最小值模板及最大堆最小堆

可以定义两个数组,来模拟双端队列,一个用来存储数列,另一个用于存储最值的下标,当新进来窗口数值时,与数组的最值比较,如果新进来的数值大就更新数组最值。

2024-07-14 13:05:11 237

原创 2024年东北师范CCPC

思路:题目说有平方和开方两种操作,如果这个数是平方数,那么它开方之后就只能开方,如果平方的话就重复了,反之就有开方和平方两种操作。思路:因为k的范围就20所以就可以暴力枚举k有几个1,然后把A中1的个数加入,再转成二进制,看d与b是否相等。思路:这个题是个博弈题,我们可以发现想让brz赢就要让他取石子,1,2,3。都是偶数,因为这个题要求异域和,但是两人都足够聪明所以brz不可能赢。

2024-06-01 21:14:48 783

原创 二分查找与模板

(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。

2024-05-31 17:20:39 459

原创 2024年西安交通大学程序设计校赛

思路:这个题题意虽说到了树但其实就考了一个贪心,可以把他给的支配关系用数组存起来,然后找到最多的数,就把这个数当成父节点就行了。思路:这个也是一个贪心题,就是让给的数从后往前遍历,如果是0就直接输出,不是就把这个数存到下标为这个数的后面。

2024-05-29 18:32:40 1103 1

原创 2022ICPC(南京站)

思路:这个题是个贪心题,就是但你遇见0时最好把它变成-1,可以使最后攻击力最大,我们可以当数量大于1时,遇见0就把0变成-1,当数量等于1时遇见-1可以吧0变成-1的反悔成0变成1的就行了。思路:这是一个签到题比较简单,只要判断出字符串中出现最多的字符,然后再让字符总数减去就行了。

2024-05-28 19:29:49 319

原创 2023广东省大学生程序设计竞赛

关键在于 check 函数,它可以这么写:题目中说每次只能向右或向下走,所以每一步的横坐标肯定都大于等于上一步,可以使用一个变量y记录,因此当某个点小于 check 函数传入的答案并且当前点的横坐标要比前一个小时,就说明这个答案不对,否则当前点的横坐标大于等于前一个时,更新 y。思路:这个题其实也是贪心,就是按满意度差值排序,按后用前缀和维护一下,最后遍历一遍就出来了。思路:这个题就是考了一个贪心和双指针,就是每次到最便宜的商店去买,到最贵的商店卖,A题:签到提直接模拟就行了。直接暴力DFS就行了。

2024-05-28 09:25:17 520

原创 同余定理算法

给定一个正整数m,如果两个整数a和b满足(a-b)能够被m整除,即(a-b)/m得到一个整数,那么就称整数a与b对模m同余,记作。【定义】 设m是大于1的正整数,a、b是整数,如果m|(a-b),则称a与b关于模m同余,记作a≡b(mod m)。两个整数a、b,若它们除以整数m所得的余数相等,则称a与b对模m同余或a同余于b模m。对于同一个除数,如果有两个整数同余,则这两个数的差能被这个除数整除。对于同一个除数,如果有两个整数同余,则它们的乘方仍然同余。对于同一个除数,两个数的乘积与它们余数的乘积同余。

2024-05-26 12:13:30 235

原创 快速幂求逆元与逆元

2024CCPC郑州邀请赛-Problem H. 随机栈用到了逆元但当时没有想到没有写出来。写的是多个数求乘法逆元而快速幂求逆元用于单个数求乘法逆元。逆元是对分数取模用的。

2024-05-26 10:22:38 387

原创 乘法逆元算法

有些云里雾里的那个取正整数的地方,好多地方都是公式推理和验证定理的正确性,看不懂,初等数论再说!乘法逆元的意思就是给出两个数a,b如果a,b互质(就是两个数的最大公约数是1)那么就有。1(mod 5),x=2,7,12.....x的每个值都差5;可以用费马小定理来推导乘法逆元我就不细讲了想知道可以看这个博客。这个题必须用scanf和printf要不然超时。就是必有a*x%b==1;

2024-05-22 20:47:51 1117 1

原创 位运算用法

因为这个题是说有16个高位和16个低位所以用int类型肯定不可以因为int范围是。看了^运算符的用法以后就知道两个相同的数^就等于零所以最后cnt就是这题结果。因为<<和>>符号不好理解所以我举个例子。0 0000 转换成十进制也就是。这两个类型的具体差别可以看这篇博客。可以让你更好理解这两个运算符。还有一个关于^这个运算符用法。位运算在代码中可以简化代码。unsigned这个范围是。

2024-05-21 20:58:45 651 1

空空如也

空空如也

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

TA关注的人

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