
算法学习
文章平均质量分 64
学会沉淀。
hopehopehope
展开
-
刷题记录(好题)
滑动窗口思想,一个数组记录起始点(记录出现过的次数),另一个数组记录截至点(记录出现过的次数),从0开始遍历,设定一个长度为d的滑动窗口,用一个数记录滑动窗口内次数的总和,当边界>d时,进行最大值最小值比较(滑动窗口每次移动总和都会发生变化,因此可以来判断出最大和最小值),比较完之后要减去原来起始点的次数值(因为此时起始点已经来到了r-d+1,也就是往右移动了一位).原创 2024-10-06 22:06:29 · 382 阅读 · 0 评论 -
题解题解题解题解
这也是一道dp题,从d~0进行遍历,用一个数组这样子记录f[高度]=生命,将垃圾根据掉落时间从小到大进行排序,若当前高度的生命大于当前垃圾掉落的时间且高度+当前生命不小于所需要跳过的高度就可以直接输出(因为我们是从小到大根据掉落时间进行遍历的,越早满足条件自然越符合题目要求),否则就按照正常dp来,f[j]=max(f[j],f[j+lj[i].h])查找第一个大于x的元素的位置。it.find(a.begin(),a.end(),查找的元素),若集合中不存在该元素则会返回a.end()原创 2024-08-04 16:25:47 · 736 阅读 · 0 评论 -
cf场+线性dp
令a[1]=x[1]+1后我们可以让a[i+1]=a[i]+x[i],但是这样的话数可能会比较小,所以我们可以累加a[i],因为是mod所以只要不大于x[i+1]可以一直加下去。2.n>b-a>0这种情况我们还需要考虑到使用到的a,在此之前我们按照等差数列出售了(b-a)个,那么剩下n-(b-a)个我们则需要按照a来出售。采用双指针,一个指向a的头部,一个指向b的头部,两者开始进行匹配,若相同则b往下走一位,否则就终止。题目的第一问其实就是让我们求最长不上升子序列,第二问就是求有多少段最长不上升序列。原创 2024-07-23 15:51:47 · 430 阅读 · 1 评论 -
abc363+cf960div.2+牛客周赛49轮
由题意可知两者每次肯定都会做出最佳选择(即选取最大),所以我们只需要判断最大值是奇数还是偶数即可(因为是Alice先手,所以奇数A必胜,否则B胜)罗列出排列的每一种情况,再根据题目要求进行判断。思路其实很简单,根据需要的i-th进行判断即可。求区间异或和(以后直接套用模板算了)本质就是求最大连续子段和。原创 2024-07-21 17:07:16 · 690 阅读 · 0 评论 -
牛客周赛50轮+cf955+abc363
判断当前有多少个>=p的就行,不满足要求的时候我们从最大的开始看(其实就是求有限范围里满足题目要求的最小值)仔细看题目,题目的意思是有可能,即没可能的情况只有一种(即x1,y1和x2,y2相交的情况)数据范围很小,直接暴力枚举吧(注意条件)不会,只能看题解写了(QWQ)abc363只a了三道题。原创 2024-07-21 09:41:18 · 587 阅读 · 0 评论 -
cf刷题(800分场)+牛客周赛51轮补提+abc360
刚写的时候没考虑周全,只判断了两种情况(能快充和不能快充),其实还有一个情况(在不能快充时我们把电量消耗到可以快充的大小,再进行快充,最后判断一下哪一种情况的耗电量最小即可)对k=1和n=1的情况特判一下,然后我们不难知道,k内最多上传1gb,在k+1时也上传1gb(为了得到最小值),然后推出公式即可。看到最短直接开始bfs,我们从数据范围的两头进行二分广搜,一步步缩小数据范围,最后直接输出就行了。每个盒子里只能放一个物品,我们找到盒子里多于一个物品盒子,把最大的留下,小的全部转移即可。原创 2024-07-18 14:58:18 · 520 阅读 · 0 评论 -
Codeforces Round 958 (Div. 2)
要满足这几个条件我们还得从n本身来看,为了使数或一个比它大的数为n,我们从n的二进制从后往前来看,我们统计n的二进制中有多少个1,依次从右到左对不同的1取非操作,有多少个1,得到的序列长度就是1的数目+1(n的本身也算),序列中的数就是n的二进制从右开始对1取非之后的转换为十进制的数。因为可以连续操作无数次,我们可以把每一段连续的0都看作一个0,最后统计0和1的个数,1多就可以(直接把起点和终点看作范围),0多就不行。看能分多少个k-1出来吧,再看最后的余数为多少。1.a里的所有数都小于等于n。原创 2024-07-16 19:30:45 · 294 阅读 · 0 评论 -
7.15洛谷蓝题
可以得到cn,n=1时c1=0,n>1时cn=cn-1-an-1-1;求得全部的和sum,平均值ave=sum/n,如图我们可以看出。题目虽少,难度却不小。原创 2024-07-15 21:27:39 · 231 阅读 · 0 评论 -
牛客小白月赛98+ABC362补题
将左边界和右边界的所有数都加起来,若同时满足左边界<=0且右边界>=0则一定可以找到相应的序列,否则就不能,用一个变量记录左边界的全部和sum(最小值,还用一个数组来记录序列,初始化为左边界的数),我们一轮一轮的来看,得到每一轮的左右边界差,若能够使sum>=0则记录序列的数组相应的位置要变成能够使sum=0的值,否则让sum加上这一轮的边界查且当前序列数组变成这一轮的右边界。直接判断这个数在数组里有没有就行。判断字符串首字符即可。原创 2024-07-15 10:06:07 · 554 阅读 · 0 评论 -
Codeforces Round 957 (Div. 3)
其实巨简单(想得太多了反而做不出来),就是求一个最大的f和一个最小的g就行了,根据两个特殊值m和k就行,先输出所有>m且<=k的值(1~n,不能重复),输出<m的值要注意一下,因为我们要让g最小,即<m的要先输出小的再输出大的(因为最后都会得到相同的和,此时就必须要取小的)例如,如果是 a=2 、 b=3 和 c=4 ,那么可以将 a 增加三次,再将 b 增加两次。以最大的为基准,把所有都累加到最大上面(为1时直接+1就行,>1时加上该值的两倍-1(分出1和把1合并是两步))幸运的是,一切都可以补救。原创 2024-07-14 09:16:48 · 789 阅读 · 0 评论 -
刷题刷题刷题
bfs题(基本上是模板但是有坑点),对每一次出队的点进行判断,若是传送门我们则需找到另一个传送门。正常搜索只有50分,必须要动态压缩才能过(看了题解和视频才搞定)分为左端点和右段点两种,每一种端点又有多种不同的情况。思路:(实在没想出来,看的题解)原创 2024-07-12 15:14:35 · 253 阅读 · 0 评论 -
刷题刷题刷题
利用vector进行建边,从第一个点开始搜索,每搜完一个点要进行回溯(因为要分别以每个点作为出发点进行搜索得到最大的 长度),从每个出发点开始进行递归搜索得到最大长度(也要回溯)从1,1开始dfs,若行数x>n则立马刷新最大值退出搜索,若y>m则进入下一行从第一列开始搜索即x+=1,y=1,对当前的搜索点x,y的八个方向进行+1,因为不能相邻。贪心题,将逆序的字符串和正序的从头开始对比,谁小就输出谁就行了(一定要记录输出的次数,每输出80次换一下行,我就是忘记看了导致一直卡样例)原创 2024-07-09 09:43:58 · 233 阅读 · 0 评论 -
搜索+动态dp
思路:虽然是bfs板子题,但是bfs的板子已经忘光了该死的普及搜索题,一道黄题代码过百思路:由题意可知该题的结果=空的个数+周围没有空格的数字个数,首先将雷全部标记为-1(方便后续对数字的操作,然后对数组进行遍历,当遇到雷时即-1时搜索其八个方向,将所有非雷的元素全部+1,然后统计的周围没有空格的数字个数即不为0,-1且周围没有空格的个数,最后统计空的个数)AC代码:思路:代码简单到我不敢相信(其实就是贪心,没用dp),原创 2024-07-07 22:19:12 · 407 阅读 · 0 评论 -
搜索+动态规划
从第一种饲料开始进入搜索,每次搜索进行一次判断,若饲料数已超过数据则马上结束这一次搜索(对当前饲料进行搜索,用数组记录),得到需要的饲料数,并用数组存起来所需的饲料编号,对所有饲料的相同一种的维他命进行判断,得到最优解,继续进行搜索有两种可能(一是不算当前饲料,即饲料数加1,但是所需饲料数不加1,二是当前饲料数和所需饲料数都加1),最后所有搜索结束后按照题目要求输出即可。开始没写出来,看了题解后有了一些头绪(感觉应该有普及+的难度了)。01背包思路(太久远了,忘了)来几道板子题唤醒一下沉睡的记忆。原创 2024-07-05 22:30:49 · 354 阅读 · 0 评论 -
字典树模板+位运算
trie树板子题,稍微有一丢丢不一样,套用字典树模板稍加修改就能过。原创 2024-07-04 21:09:40 · 467 阅读 · 0 评论