- 博客(63)
- 收藏
- 关注
原创 信息学奥赛一本通/openjudge Crossing River
(注:由于一本通题面描述的可能有些欠缺,所以这里的体面采用openjudge英文翻译后的体面)
2024-08-30 21:47:53
993
原创 二分图总结
这篇文章是作者在学完二分图的总结,由于作者比较弱,可能只总结了一些皮毛,如果有错误,请大佬指正二分图就像名字说的那样,将一幅图二分了,分成两个点集(U,V),并且每一条边都连接着UV(重!!!:二分图任意点集的点不能连向此点集的点,如U点集的点不能连接U点集的点)。
2024-08-23 12:03:00
850
原创 单调队列/单调栈
单调栈的题目, 保持单调递增,若出现不符合单调性时,在出栈时,记录right和left,并且维护left,随后每退出一个并计算一次矩形最大值,矩形的高就是退到哪,哪个小矩形的。(单调队列优化多重背包这一块还是比较难理解的,我也是看了许多博客,才勉强懂一点点,我也可能说错了,如果我说错了,大家可以给我指正,另外,多重背包优化,也可以看这位大佬。的一个数据结构,STL就是deque,但是deque又是双端队列,实际是双端队列的操作在完成单调队列,所以单调队列又叫双端队列。单调队列就是可以求最值的一个工具。
2024-07-26 11:49:55
619
原创 最大公因数和最小公倍数函数(补续)
大约在去年的时候我发了一篇关于最大公因数和最小公倍数的文章当时我只在里面讲了辗转相除和暴力两种方法,一个O(logn),一个O(n),现在我又带着新的方法回来了(
2024-05-02 14:17:38
950
原创 动态规划---(递推3,放置方案数,方格取数)
现在有 k 种颜色的小球,每一种颜色的小球有若干个,有 n 个盒子排成一排,现在要往盒子里放球,每一个盒子需要放 1 个小球,要求相邻的盒子之间最多只有 2 个连续颜色相同的小球,问你有多少种方案,由于答案很大,请你对 10^9+7 取模。样例 2 中的 6 种方案如下:[1,1,2],[1,2,1],[1,2,2],[2,1,1],[2,1,2],[2,2,1]②相同:前面的dp[i-1][0]有26种方案,刚好满了,不需要+dp[i-1][1]了,所以可以直接等于dp[i-1][0]
2024-05-01 22:24:31
127
原创 动态规划--(递推2(最长上升子序列,格子染色,斐波那切数列,奇数塔问题,最长子段和))
这样说还是有点抽象,举个例子,比如我要求前i个数的最长上升子序列,那么小于a[i]的数有a[v1],a[v2],a[v3]这三个,而dp[i]就是dp[v1]+1,dp[v2]+1,dp[v3]+1,dp[i](因为前三个的最大值可能小于dp[i],所以也要加上,但是这是不可能的事,不过为了后面的统一还是加上)的最大值,所以状态转移方程是dp[i]=max(dp[i],dp[k]+1)(k为小于i大于0的自然数)。的时候,我们称这个序列是上升的。你的任务,就是对于给定的序列,求出最长上升子序列的长度。
2024-03-30 13:41:11
1047
原创 1258:【例9.2】数字金字塔-----动态规划(递推)1
首先我们想得到答案必须经过最后一层的筛选,最后一层的每个数都是加上自己再加上上一层达到的最大值的,所以对于最后一层的每一个点向上推,到达上一层后,上一层的每个数也都是加上自己后再加上一层过来的最大值过来的……最后推到最顶层,这时我们就能根据规律再反推得到答案。而这种思路就是动态规划–递推。首先解这道题我们第一眼想到是不是暴力,但是暴力的话是O(n!)的时间复杂度,很明显,会超时。不如我们把他分成若干子问题把,就像分治那样。那么很明显了,根据上一段的规律我们能写出代码。最后大家如果不了解dp,可以点这里。
2024-03-16 22:55:28
622
原创 dp动态规划的基本
在平时刷题的过程中,总会有一些题目让人无法下手,比如什么最长上升子序列,最长公共子序列,01背包…当你去了解它时,你会知道它们叫一个统一的名字 ----动态规划(dp),这是什么东西?,规划动态的东西?动态规划到底是何方神圣呢?动态规划算法有什么用呢?这些问题在这篇文章我都会为你解答。
2024-03-16 22:53:35
488
原创 二分/二分查找(整数二分详解+拓展浮点二分)
先上题目在一个有序数组中,查找x所在的下标。输入第一行两个整数n和m。第二行n个数,表示有序的数列。接下来m行,每行一个整数x,表示一个询问的数。输出对于每个询问如果x在数列中,输出下标。否则输出-1样例输入 15 33 4 5 7 9738输出 141-1提示对于100%的数据n和m的范围[0,10^5];x和数列中的元素范围[-10^6, 10^6];数列中的任意两个元素都不相同。
2024-03-16 18:39:47
967
原创 广搜(BFS)
广搜全称叫广度优先搜索,或叫宽度优先搜索,简称BFS。人如其名,他不像深搜一路干到底,而是一层一层的搜索,如图当然,广搜有很多种,这只是广搜和二叉树的结合,不过大体就是像这样,一层一层的搜索。
2024-03-02 22:07:34
2931
原创 二叉树基本概念与遍历
二叉树不同于别的树,因为他每个节点最多只有两个子节点,而别的树可以有无数个子节点。所以二叉树就是只最多只有两个子节点的树,一个子节点叫右子节点,另一个子节点叫左子结点而他们的上一层就是父子节点,最上层叫根节点。
2024-02-20 17:20:52
824
原创 算法-----高精度2(高精度乘法,高精度除法,高精度斐波那锲数列)
对于高精度乘法来说似乎不像高精度加减法那样简单了,我们似乎得一个一个加了,因为我们都知道a×b=a+a+a+a+a…+a(b个a)。如果真要这要的话那1e9*1e9不得超时啊,所以不能这样,我们还是得从乘法竖式入手这样看似乎看不出来什么,那我们可以对其改变下模式可以进行撤位看看这样就撤位成功了,但肯定不是 最后结果,每一位都要化成一位数。但是我们可以先等等,观察一下规律。不难发现当逆序存储后,我们做乘法竖式模拟时,c[i+j]+=a[i]*b[j](下标从零开始)。最后我们只需进下位就行了。
2024-02-15 16:37:46
946
原创 1921:【02NOIP普及组】过河卒
而这种题目也很简单,标数法(c++话讲就是递推)你求出到每个点有多少条路线,公式是到上面点的路线数加右边点的路线数就是答案,这也是这类状态转移方程的由来。棋盘用坐标表示,A点(0,0)、B点(n, m)(n,m为不超过20的整数,并由键盘输入),同样马 的位置坐标是需要给出的(约定:C≠A,同时C≠B)。同时在棋盘上的任一点有一个对方的马(如上图的C点),该马所在的点和所有跳跃一步可达的点称为方马的控制点。B点的坐标(n,m)以及对方马的坐标(X,Y) {不用判错}一个整数(路径的条数)。
2024-02-13 21:49:08
498
原创 算法-----高精度算法1(高精度加法,高精度减法)(详解)
高精度的意思就是他得名字----高的精度,简单说就是位数很大,而高精度算法就是将这些高精度数(位数很大在几百几千几万位的数叫高精度数)通过计算机的型式模拟出来结果。
2024-02-13 20:30:40
1062
原创 算法---回溯(正文)
回溯算法的定义就是和暴力枚举一样枚举所有可能并加撤回,也能和暴力一样去掉一些重复(在之前就被筛出,但还要枚举这个,我们可以跳过这个了---------这个就是但为什么回溯不是暴力呢?----这个问题大家可以先想想最后我在说。其实回溯也是递归,如果你熟悉树状图的话,你会发现回溯的枚举过程就是,而递归呢也是一棵树。
2024-02-09 14:11:58
1983
原创 [NOIP2010 普及组] 接水问题
【分析】 首先理解题意大概为:n个同学要结束,只有m个水龙头,每个同学接完后下一个同学马上补上,最后求最后一个人接完后用了多少时间(单位:秒(s))。第3 秒结束时,1、2 号同学每人的已接水量为3,4 号同学的已接水量为2。第4 秒结束时,1、2 号同学每人的已接水量为4,5 号同学的已接水量为1。第1 秒,3 人接水。第1 秒结束时,1、2、3 号同学每人的已接水量为1,3 号同学接完水,4 号同学接替3 号同学开始接水。第2 秒结束时,1、2 号同学每人的已接水量为2,4 号同学的已接水量为1。
2024-01-30 12:38:20
644
原创 1970:【15NOIP普及组】扫雷游戏/1500. 数组挑战-扫雷
在n行m列的雷区中有一些格子含有地雷(称之为地雷格),其他格子不含地雷(称之为非地雷格)。玩家翻开一个非地雷格时,该格将会出现一个数字——提示周围格子中有多少个是地雷格。游戏的目标是在不翻出任何地雷格的条件下,找出所有的非地雷格。字符’*’表示相应格子是地雷格,字符’?’表示相应格子是非地雷格。注:一个格子的周围格子包括其上、下、左、右、左上、右上、左下、右下八个方向上与之直接相邻的格子。用’*’表示地雷格,用周围的地雷个数表示非地雷格。列的雷区中的地雷分布,要求计算出每个非地雷格周围的地雷格数。
2023-12-31 12:16:33
521
原创 1663:【 例 1】取石子游戏 1
【思路】必胜策略,可得(N%(k+1)==0)时先手必输,其他则先手必赢(不会必胜策略可以用枚举也能弄出来)假如参与游戏的玩家都非常聪明,问最后谁会获胜?对于全部数据, 1≤N≤10^5,1≤K≤N。输出仅一行,一个整数,若先手获胜输出 1。2、每人每次取走若干颗石子(最少取 1。3、石子取光,则游戏结束;4、最后取石子的一方为胜。1、游戏双方轮流取石子;输入仅一行,两个整数 N。
2023-12-19 12:51:43
471
原创 1664:【例 2】取石子游戏 2
2、每人每次选一堆石子,并从中取走若干颗石子(至少取 1。堆石子,每堆石子的数量分别为 X1,X2,…4、如果轮到某人取时已没有石子可取,那此人算负。对于全部数据, N≤5×104,1≤Xi≤105。输出仅一行,一个整数,若先手获胜输出 win。假如两个游戏玩家都非常聪明,问谁胜谁负?3、所有石子被取完,则游戏结束;1、游戏双方轮流取石子;,表示每一堆石子的颗数。,后手获胜输出 lose。个空格间隔的整数 Xi。第一行,一个整数 N。【思路】异或一遍就过。
2023-12-19 12:38:52
491
原创 1641:【例 1】矩阵 A×B
对于全部数据,1≤n,m,p≤100,−10000≤aij,bij≤10000。cij=∑k=1maikbkj(看不懂的看代码里面有简易得定义)中的元素,则相乘所得矩阵 C。矩阵相乘的定义:n×m。的矩阵相乘变成 n×p。,现需要你求 A×B。第一行两个数 n,m。
2023-12-18 22:35:20
815
原创 1320:【例6.2】均分纸牌(Noip2002)
【思路】我们看完题目第一眼想不就是让他们变为平均数嘛,借其他大于平均数的然后移到小于平均数的,如1,9,9,17平均数9,则1向17借8,17-8,就成了9,9,9,9。从 ③ 取4张牌放到④(9 8 13 10)->从③取3张牌放到 ②(9 11 10 10)-> 从②取1张牌放到①(10 10 10 10)。其他堆上取的纸牌,可以移到相邻左边或右边的堆上。(n堆纸牌,每堆纸牌初始数,l≤a[i]≤10000)。有n堆纸牌,编号分别为 1,2,…的堆上取的纸牌,只能移到编号为n−1。
2023-12-07 21:05:15
802
原创 1319:【例6.1】排队接水
第二行为这种排列方案下的平均等待时间(输出结果精确到小数点后两位)。个人在一个水龙头前排队接水,假如每个人接水的时间为Ti。【思路】纯贪心,直接莽,不过得注意点时间,不然直接超时。共两行,第一行为n(1≤n≤1000)个人每人的接水时间T1,T2,…有两行,第一行为一种排队顺序,即1。个人排队的一种顺序,使得n。个人的平均等待时间最小。
2023-12-07 20:29:20
776
原创 1801:异或
gcd(a,a-c)=c.所以我们只需判断a xor c即可,时间复杂度O(n log2n).当然2(a<b)和1(a>b)完全相反(但是结果仍有效),这里不做演算。a,b)<=a-b,a xor b>=a-b 不难看出,c=a-b,(c也可是随便字母),于是我们可以枚举c,而a=i*c,因此。)但我们观察也可以发现,其实两种情况的结果都差不多,我们就用1(a>b)举例:因a>b,所以gcd(【思路】我们可以1个个枚举,需要O(n^2)的时间复杂度就能过,但由于这一题的数据范围太大。
2023-11-26 19:01:04
433
原创 162. 寻找峰值
给你一个整数数组 nums,找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回 任何一个峰值 所在位置即可。= nums[i + 1]你可以假设 nums[-1] = nums[n] = -∞。解释:3 是峰值元素,你的函数应该返回其索引 2。输入:nums = [1,2,1,3,5,6,4]解释:你的函数可以返回索引 1,其峰值元素为 2;峰值元素是指其值严格大于左右相邻值的元素。输入:nums = [1,2,3,1]或者返回索引 5, 其峰值元素为 6。
2023-11-20 18:15:53
100
原创 1824:【01NOIP提高组】一元三次方程求解
【题目描述】有形如:ax3+bx2+cx+d=0 这样的一个一元三次方程。给出该方程中各项的系数(a,b,c,d 均为实数),并约定该方程存在三个不同实根(根的范围在-100至100之间),且根与根之差的绝对值>=1。要求由小到大依次在同一行输出这三个实根(根与根之间留有空格),并精确到小数点后2位。提示:记方程f(x)=0,若存在2个数x1和x2,且x1<x2,f(x1)*f(x2)<0,则在(x1,x2)之间一定有一个根。【输入】一行,即输入a,b,c,d【输出】一行,三个实根。
2023-11-11 16:44:56
154
原创 2586. 统计范围内的元音字符串数
如果字符串以元音字母开头并以元音字母结尾,那么该字符串就是一个 元音字符串 ,其中元音字母是 ‘a’、‘e’、‘i’、‘o’、‘u’。输入:words = [“hey”,“aeo”,“mu”,“ooo”,“artro”], left = 1, right = 4。输入:words = [“are”,“amy”,“u”], left = 0, right = 2。返回 words[i] 是元音字符串的数目,其中 i 在闭区间 [left, right] 内。words[i] 仅由小写英文字母组成。
2023-11-11 15:56:57
220
原创 LCR 127. 跳跃训练
今天的有氧运动训练内容是在一个长条形的平台上跳跃。平台有 num 个小格子,每次可以选择跳 一个格子 或者 两个格子。请返回在训练过程中,学员们共有多少种不同的跳跃方式。结果可能过大,因此结果需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。【思路】动规永远的神!
2023-11-04 22:13:14
104
原创 2100:【23CSPJ普及组】一元二次方程(uqe)
如果方程有实数解,则按要求的格式输出两个实数解中的较大者。,则输出 {p},否则输出 {p}/{q},其中 {n} 代表整数 n。行,每行包含一个字符串,表示对应询问的答案,格式如题面所述。众所周知,对一元二次方程 ax2+bx+c=0,(a≠0)上述表示中 {n} 代表整数 {n} 的值,详见样例。特殊性质 C:如果方程有解,那么方程的两个解都是整数。为整数,则输出 {q2}*sqrt({r});为整数,则输出 sqrt({r})/{q3};,此时输出{c}*sqrt({r})/{d};
2023-11-04 21:45:08
504
原创 2099:【23CSPJ普及组】公路(road)
已知车的油箱足够大,可以装下任意多的油,且每升油可以让车前进d。,分别表示公路上站点的数量和车每升油可以前进的距离。输出一行,仅包含一个正整数,表示从站点 1。公路上每个站点都可以加油,编号为i。元,且每个站点只出售整数升的油。,分别表示在不同站点加油的价格。输入的第一行包含两个正整数 n。,小苞至少要花多少钱加油。最优方案下:小苞在站点 1。的站点一升油的价格为ai。,分别表示站点间的距离。,一开始小苞在站点 1。,至少要花多少钱加油?输入的第二行包含n−1。个站点,编号为从 1。输入的第三行包含 n。
2023-11-04 12:41:42
682
原创 2098:【23CSPJ普及组】小苹果(apple)
输出一行包含两个正整数,两个整数之间由一个空格隔开,分别表示小苞拿走所有苹果所需的天数以及拿走编号为 n。【思路】观察题目我门可以发现,他其实拿的时候是每次拿走ceil(n/3)个的。随后小苞会将剩下的苹果按原先的顺序重新排成一列。小苞是小 Y 的好朋友,每天她都会从中拿走一些苹果。小苞想知道,多少天能拿完所有的苹果,而编号为n。小苞第四天拿走了编号为 5$ 的苹果。所以根据这个性质我们便可完成以下代码。每天在拿的时候,小苞都是从左侧第1。的苹果是在第几天被拿走的?小苞第一天拿走了编号为1。
2023-11-04 12:38:36
1147
原创 2520. 统计能整除数字的位数
解释:121 可以被 1 整除,但无法被 2 整除。由于 1 出现两次,所以返回 2。如果满足 nums % val == 0 ,则认为整数 val 可以整除 nums。给你一个整数 num ,返回 num 中能整除 num 的数位的数目。解释:1248 可以被它每一位上的数字整除,因此答案是 4。解释:7 被自己整除,因此答案是 1。输入:num = 1248。输入:num = 121。num 的数位中不含 0。输入:num = 7。
2023-10-28 13:10:48
66
原创 2558. 从数量最多的堆取走礼物
给你一个整数数组 gifts ,表示各堆礼物的数量。每一秒,你需要执行以下操作:选择礼物数量最多的那一堆。如果不止一堆都符合礼物数量最多,从中选择任一堆即可。选中的那一堆留下平方根数量的礼物(向下取整),取走其他的礼物。返回在 k 秒后剩下的礼物数量。示例 1:输入:gifts = [25,64,9,4,100], k = 4输出:29解释:输入:gifts = [1,1,1,1], k = 4输出:4解释:在本例中,不管选中哪一堆礼物,都必须剩下 1 个礼物。
2023-10-28 13:05:45
95
原创 面试题 08.03. 魔术索引(初学者也能看懂)
n-1]中,有所谓的魔术索引,满足条件A[i] = i。给定一个有序整数数组,编写一种方法找出魔术索引,若有的话,在数组A中找出一个魔术索引,如果没有,则返回-1。若有多个魔术索引,返回索引值最小的一个。当然这种还是太慢,所以我们可以观察题目,便可发现他是一个有序数组,所以不用那么麻烦,直接遍历。【思路】先找到第一个魔术索引,再进行判断谁是最小的。输入:nums = [0, 2, 3, 4, 5]输入:nums = [1, 1, 1]击败 83.53%使用 C++ 的用户。说明: 0下标的元素为0。
2023-10-18 20:29:06
46
原创 1245:不重复地输出数
输入n个数,从小到大将它们输出,重复的数只输出一次。保证不同的数不超过500个。一行,从小到大不重复地输出这些数,相邻两个数之间用单个空格隔开。第一行是一个整数n。之后n行,每行一个整数。整数大小在int范围内。【思路】输入,去重,排序,输出。
2023-10-15 10:39:29
55
原创 1201:菲波那契数列
第1行是测试数据的组数n,后面跟着n行输入。每组测试数据占1行,包括一个正整数a(1<=a<=20)。菲波那契数列是指这样的数列: 数列的第一个和第二个数都为1,接下来每个数都等于前面2个数之和。输出有n行,每行输出对应一个输入。输出应是一个正整数,为菲波那契数列中第a个数的大小。给出一个正整数a,要求菲波那契数列中第a个数是多少。错,我还有一种打表啊呸动态规划。这道题比较简单,无脑递归。
2023-10-14 21:18:28
435
原创 1281:最长上升子序列
链接:【题目描述】一个数的序列bi,当b1<b2<…<bS的时候,我们称这个序列是上升的。对于给定的一个序列(a1,a2,…,aN),我们可以得到一些上升的子序列(ai1,ai2,…,aiK),这里1≤i1<i2<…<iK≤N。比如,对于序列(1,7,3,5,9,4,8),有它的一些上升子序列,如(1,7),(3,4,8)等等。这些子序列中最长的长度是4,比如子序列(1,3,5,8)。你的任务,就是对于给定的序列,求出最长上升子序列的长度。【输入】
2023-10-09 13:11:40
125
原创 2000:分数求和
>:【题目描述】小佳佳的数学老师老是给她布置分数运算的数学作业。她做这样的题目太多,太烦啦!因此想写一个程序来计算。给出两个分数的分子和分母,求这两个分数之和。要求所求两个分数之和一定要是一个最简分数(分子与分母的最大公约数为1,当分母为1省略分母)。我们约定,分数形式为a b,其中a为分子,b为分母。【输入】一行,4个整数,分别是两个分数的分子和分母。【输出】这两个分数的和。【输入样例】1 2 2 3【输出样例】7 6【提示】【样例1解释】12+23=76。
2023-10-05 13:25:24
238
原创 1969:【15NOIP普及组】金币
链接:链接:【题目描述】国王将金币作为工资,发放给忠诚的骑士。第一天,骑士收到一枚金币;之后两天(第二天和第三天),每天收到两枚金币;之后三天(第四、五、六天),每天收到三枚金币;之后四天(第七、八、九、十天),每天收到四枚金币……;这种工资发放模式会一直这样延续下去:当连续N天每天收到N枚金币后,骑士会在之后的连续N+1天里,每天收到N+1枚金币。请计算在前K天里,骑士一共获得了多少金币。【输入】只有1行,包含一个正整数K,表示发放金币的天数。【输出】
2023-09-27 22:07:38
183
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人