- 博客(71)
- 收藏
- 关注
原创 位运算的一些常用性质和公式
各二进位全部右移若干位,对无符号数,高位补0,有符号数,右移补1(由于数在计算机中是以二进制存储的,位运算是对整数在内存中的。的二进制位完全重叠时(如。的二进制位完全包含时(如。有一个为1结果就为1。
2025-04-05 12:22:23
235
原创 洛谷P2367 语文成绩(一维差分模板)
对于差分算法我们一般得先构造差分数组 ,假设现在有两个数组 a和 b\我们需要构造 b为差分数组,使得 a数组是 b的前缀和数组就是说a 中每一个数据,都是 b中在包括这个位置之前所有的数据的和。这时 b 被称为 a 的差分。所以 b数组每个元素无非就是 a𝑎数组的每一个元素与其前一个元素的差~~为什么这么说?那么这里的 构造过程 实际上就是遍历一遍 a 数组,就可以构造出 b ,时间复杂度为O(N)。i <= n;i++) {
2025-02-06 18:29:42
1178
原创 洛谷P1719 最大加权矩形
本题用到了二维前缀和, 二维前缀和公式为s[i][j]=s[i−1][j]+s[i][j−1]−s[i−1][j−1]+a[i][j],其中数组a[N][N]存储输入的矩阵。s[N][N]存储二维前缀和,之和求子矩阵最大和用x1,x2,y1,y2遍历求对于每个子矩阵 (x1,y1) 到 (x2,y2),其元素和为:sum=s[x2][y2]−s[x1−1][y2]−s[x2][y1−1]+s[x1−1][y1−1],用到了四重循环时间复杂度为O(n^4)最大矩形(子矩阵)的和。
2025-02-06 12:27:51
914
原创 P1072 [NOIP 2009 提高组] Hankson 的趣味题
条件转化:根据最大公约数和最小公倍数的性质,可以将条件转化为:gcd(x/a1,a0/a1)=1 gcd(b1/x,b1/b0)=1这样可以将问题转化为对 x 的因数分解和条件判断。因数分解:对 b1进行质因数分解,得到所有可能的 x 的因数。对每个因数 x,检查是否满足上述两个条件。统计满足条件的 x.
2025-02-05 21:40:57
1075
原创 洛谷P1835 素数密度
题目分析:开始想到了欧拉筛法,但交上去发现wa只得了40分,了于是看数据范围发现然而我们并不能筛到 2e9,空间上也不允许,想想办法,因为2e9范围内的质数因子最大也到不了50000(用计算器或者代码sqrt一下2∼50000以内的素数,然后对于每一个数,筛出质因子的倍数,剩下的就是区间内的质数啦。一行,一个整数,表示区间中素数的个数。
2025-02-04 21:24:59
994
原创 洛谷[USACO08DEC] Patting Heads S
题目分析:由于本题纯暴力枚举会炸的,优化解法:统计每个数字 Ai 出现的次数。对于每头奶牛 i枚举 Ai 的所有因数 并统计出现的次数。时间复杂度:O(NM)
2025-02-03 22:30:10
988
原创 洛谷[NOIP 2016 提高组] 组合数问题
(t×n×m)对于 题目数据超时了,查询部分时间复杂度过高。一个很容易想到的优化便是:在预处理时,同时预处理出每个 n , m 对应的答案,将查询部分优化到 O ( 1 ) ,用到了二维前缀和。(n,m)遍历所有可能的 (i,j),计算组合数 (i,j),并判断是否能被 k 整除。对于每组测试数据,需要遍历 O(n×m)对于(i,j)。如果有 t 组测试数据,总时间复杂度为:O。根据组合数的定义,我们可以给出计算组合数。:这道题暴力算的话会超时,方法描述:对于每组测试数据。行,每行一个整数代表所有的。
2025-02-03 21:08:21
1089
原创 洛谷P1403 [AHOI2005] 约数研究
题目分析:本题很明显是要你求从i到n的质因数个数之和,如果采用暴力肯定是超时的,故我的想法是采用埃氏筛法来求时间复杂度为(nlog n)1s能跑完.
2025-02-02 12:16:34
408
原创 洛谷P2660 zzc 种田
这道题是一道贪心题,但是需要一些小小的优化。首先,让我们来模拟一组数据:输入:2 11,易知最大可以先裁剪出5个边长为2的正方形,然后再裁剪出一个正方形,不难发现,每次都切一个边长为min(x,y)正方形,然后将短的那一边减掉这个边长,答案加上边长∗4即可。直到x和y中有一个为0就结束。
2025-02-01 21:14:20
588
原创 洛谷P2651 添加括号III
a1/(a2/a3/a4/...)=a1a3a4.../a2,所以我们只要确认a1a3a4.../a2是否是整数。a1肯定是分子,a2肯定是分母,那么尽可能多的是a3以后的变为分子,怎么办呢?每次将a2=a2/gcd(a2,ai),i=(1,3,4,5...)即可。但是如果进行约分,知道a2能被约分成1,那么就是整数。
2025-01-31 22:10:06
420
原创 洛谷P3383 【模板】线性筛素数
题是模板题,用到了线性筛法,其中原理是保证范围内的每个合数都被删掉(在 bool 数组里面标记为非素数),而且任一合数只被:“最小质因数 × 最大因数(非自己) = 这个 合数”
2025-01-29 16:32:10
611
原创 洛谷P3913 车的攻击
题目分析:首先肯定不可能模拟棋盘,数据范围在那里,那么考虑行列,题目要求我们求出被攻击的格子我们可以先求出不被攻击的格子然后从总格子中减去就行了,如何算出不被攻击的格子数呢?我们把每个棋子所在的行和列平移一下,会得到一个矩形。那我们只需要求出长和宽,其实就是求不被攻击的行数和列数。每个棋子都会攻击所在的行和列,KK个棋子所攻击的行数和列数其实就等于K−a和K−b其中a为被重复攻击的行数,b为被重复攻击的列数。
2025-01-26 14:51:01
284
原创 洛谷P1866 编号
这是一道简单的数学题,设n = 5,5个数为:10,13,14,17,15,先将这五个数排 序,10,13,14,15,17,第一只兔子有10种选法,第二个兔子12种(去掉一种),以此类推,答案为10 * 12 * 13 * 14 * 16 % 1e9 + 7
2025-01-26 12:04:03
462
原创 洛谷P1017 [NOIP2000 提高组] 进制转换
这是道数学题,我们都知道,首先按照10进制转成n进制的做法:对这个数不断除以n,将余数一一存储,最后倒序输出,而对于此处原数和进制数都有可能为负数,也就意味着余数可能为负数,那么我们不可能输出像-100-100这种数。
2025-01-25 22:22:20
787
原创 洛谷P1100 高低位交换
先讲讲我的思路,我的就是纯模拟,先读入数,然后用转成二进制用字符串s存储,之 后反转,再新开个字符串t,将t补0使得长度之和为32,然后加入到s字符串中,最后转换成二进制(纯傻瓜式做法),:对于这道题目,我们只需要将原数的后16位前移至新数的前16 位,将原数的前16位前移至新数的后16位,这道题目就做完了,用到了位运算非常巧妙。
2025-01-24 20:34:04
347
原创 洛谷P1469 找筷子
注意到上面的题目,求筷子中落单的筷子的长度,根据性质1成双的筷子异或结果为0,如果存在落单的筷子最后肯定是0与该筷子异或得到了该筷子长度。
2025-01-24 12:35:32
340
原创 洛谷P1363 幻象迷宫
整个迷宫是由 N*M 小迷宫无限扩展形成的,想要走到无限远的地方,那就应该走出很远后,又能到达某个走过的点(这个走过是指,相对小迷宫的位置已经被走过了),所以我们只要判断这个点是否被走过就行了,:设(x,y)未走过的位置,当坐标超出边界时对其取模,同时用(lx,ly)记录真实位置,并记录(x,y)走过,当再次走到该点时对比此时真实的和原来存储的,如果不一样说明找到了一条可以无限走的路。
2025-01-21 18:53:10
495
原创 洛谷P2853 [USACO06DEC] Cow Picnic S
解题思路:从k个奶牛分别dfs只有s[i] = k 时候才让ans + 1,图用邻接矩阵才存储。
2025-01-21 16:31:27
482
原创 洛谷P1127 词链
作为词链的第一个字母,它作为单词的首字母的次数为2,作为单词的尾字母的次数为1,多举几个例子也能有这样的结论,因为从第一个单词的尾字母开始到最后一个单词的首字母结束,「每次在输入的所有字符串中查找首字母与s的尾字母相同的字符串」这个过程可以在输入的时候就建图,在首、尾字母相同的两个字符串之间建立一条边,然后搜索的时候直接用建好的这些边找就行了。注意,相同的单词若出现了k次就需要输出k次。,就是最后一个单词的尾字母和第一个单词的首字母是一样的(即可以连成一个环)。
2025-01-20 12:33:05
855
原创 洛谷P1807 最长路(拓扑排序)
本题也用到了图论中的拓扑排序,与以往不同本题要求求1~n的路径长度,所以要先将1这个点加入队列,然后从节点1开始不断遍历更新距离。设G为有n个顶点的带权有向无环图,G中各顶点的编号为1到n,请设计算法,计算图GG中1,n间的最长路径。第2到第(m+1)行,每行33个整数u,v,w(u<v),代表存在一条从u到v边权为w的边。输入的第一行有两个整数,分别代表图的点数n和边数m。输出一行一个整数,代表1到n的最长路。
2025-01-19 13:55:44
572
原创 洛谷P4017 最大食物链计数(图的拓扑排序)
由于这个结果可能过大,你只需要输出总数模上80112002的结果。第一行,两个正整数n,m,表示生物种类n和吃与被吃的关系数m。接下来m行,每行两个正整数,表示被吃的生物A和吃A的生物B。的路径(即最右端可以不是最佳消费者的最大食物链)我们称之为。一行一个整数,为最大食物链数量模上80112002的结果。给你一个食物网,你要求出这个食物网中最大食物链的数量。既然食物链中的生物可以看成节点,那么。(这里的“最大食物链”,指的是。,生物之间的关系建立一条。的入度一定为0,而。
2025-01-18 22:42:53
521
原创 洛谷P1113 杂务(拓扑排序)
初始化队列,将入度为0的节点放入队列。取出队首,遍历其出边,将能够到达的点入度减一,同时维护答案数组。若在此时一个点的入度变为0,那么将其加入队列。回到第二步,直到队列为空。intn,m;//邻接表存图//d入度,t表示时间,ans答案voidadd(inta,intb)//建立一条从a指向b的边voidtopsort()//拓扑排序while(!i!=-1;
2025-01-18 14:13:35
1158
原创 洛谷P3916 图的遍历
给出N个点,M条边的有向图,对于每个点v,求A(v)表示从点v出发,能到达的编号最大的点。接下来M行,每行2个整数Ui,Vi,表示边(Ui,Vi)。一行N个整数A(1),A(2),…第1行2个整数N,M,表示点数和边数。
2025-01-17 21:07:52
347
原创 洛谷P5318 【深基18.例3】查找文献(c嘎嘎)
学过数据结构我们都知道DFS通俗来说是从图的一个点出发,选择下一个点再以下一个点向下选择直到你选择的点没有可以选择的点了,BFS,用通俗的话来说,就是你从图中的一个节点出发,其有几个子节点,你会先将这所有的子节点遍历,再挑其中的一个子节点,遍历它的所有子节点,再换到另外一个结点遍历其所有的子节点。这样一层层遍历,以此类推。
2025-01-04 20:33:48
728
原创 洛谷P5250 【深基17.例5】木材仓库(c嘎嘎)
对于操作1,存的话直接另key的值为1即可,而对于不存在又要取出长度相近的,本人的方法是利用map的指针操作,先“假装”存一下该不存在的木头,然后指针定位该木头的位置,于是it++就得到了比它长的下一根木头的位置,it--就得到了比它短的下一根木头的位置,两者比较一下,然后取出长度相近的即可,最后记得erase之前“假装”存的那根不存在的木头。:本题借鉴了大佬的做法(因为没想多好的处理方法~~),本题可以用。
2024-12-28 00:04:41
620
原创 洛谷P1551 亲戚(c嘎嘎)
这道题很明显是考察并查集,也可以算是板子题了,做这道题顺带复习下并查集,下面介绍下并查集。并查集是一种用于管理元素所属集合的数据结构,实现为一个森林,其中每棵树表示一个集合,树中的节点表示对应集合中的元素。
2024-12-26 18:12:45
607
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人