
刷题刷题刷题
文章平均质量分 54
学会沉淀。
hopehopehope
展开
-
ACM社团第三次测试题解(伪代码,提供关键思路)
【代码】ACM社团第三次测试题解(伪代码,提供关键思路)原创 2024-11-18 22:24:56 · 326 阅读 · 0 评论 -
洛谷刷题复习任务
dp线性:1004 4933 2679 1854 1541 4310区间:1775 1140 CF607B Zuma 3205 1880 4290 1063 1070 树与图上:1352 2016 2015 2014 4316 1613 2656状态:2622 1441 1896 1776 前缀和:1314 1719 差分:2367 3397 3406 4552 1083离散化:14原创 2024-11-14 20:57:27 · 140 阅读 · 0 评论 -
-刷题小结
思路:第一种:a-b>=c也就是b-a原创 2024-10-15 20:42:00 · 384 阅读 · 0 评论 -
刷题记录(好题)
滑动窗口思想,一个数组记录起始点(记录出现过的次数),另一个数组记录截至点(记录出现过的次数),从0开始遍历,设定一个长度为d的滑动窗口,用一个数记录滑动窗口内次数的总和,当边界>d时,进行最大值最小值比较(滑动窗口每次移动总和都会发生变化,因此可以来判断出最大和最小值),比较完之后要减去原来起始点的次数值(因为此时起始点已经来到了r-d+1,也就是往右移动了一位).原创 2024-10-06 22:06:29 · 382 阅读 · 0 评论 -
div3+牛客
给定n,数组中只能包含任意位置的(1~n)且每个数字只能出现一次,k是该数组中含有的逆序数个数,要求选择一组符合n,k要求排序的数,将其倒序后求出其逆序数个数。str.find(x),如果能在str中找到x字符串,则返回匹配的第一个字符的下标。该题其实存在规律,原来序列和倒序后的序列的逆序数个数之和为n*(n-1)/2个。第一个乘客随便坐,从第二个乘客开始只能选择一个两边至少有一个座位不是空位的。str.apend(x,y),将x个y拼接到str后面。其实就是字符串匹配,根据不同情况进行对应的。原创 2024-09-12 22:07:16 · 311 阅读 · 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 评论 -
河南萌新联赛2024第(三)场:河南大学(重现赛) 补题
虽然是字符串的题目我们却可以使用线性dp来完成(仔细观察我们不难发现这其实就是一道稍微变形了的最长上升子序列问题),这里我学了一下char中关于strstr的使用,即strstr(s1,s2)判断s2是不是s1的子串,若是就返回其对应的下标,为了满足题目要求我们可以知道不仅要求是子串,还得是前缀,即我们对strstr(s1,s2)进行判断,若其返回值的首位与s1相同则证明符合题意,否则不行。四重循坏即可(数据范围很小,最大也是25^4,完全不用担心)还写了一道字符串的题目,感觉还行。有规律n*n-n+2。原创 2024-08-01 10:42:22 · 426 阅读 · 0 评论 -
VPVPVPVPVP+刷题刷题刷题
将x转化为二进制从最开始一直到题目要求的最大位数进行遍历,用一个数组来记录(只能为1,0,-1),若转化的当前位数值>1则将数组的下一位值定为1,当前数组位的值为0(我们此时的目的之一也是慢慢记录x的范围然后一步步缩小直到确定),若不>1则需要分情况讨论(第一种是前一位>1是需要再进一位,即后一位为1,前一位为-1),若不等于1即将当前位为1即可。每天最快乐的事除了刷题就是VP,但是感觉还是没什么很大的提升,算法好难呐。//------ 棘手大学 世界第一 ------//原创 2024-07-29 21:25:49 · 488 阅读 · 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 评论 -
7.2总结
顺时针和逆时针是相反的,会了一个就能会另一个,花点时间就能看懂,根据题意我们可以知道要旋转的是以目标点中心的2r+1阶矩阵,矩阵最左边为x-r,最右边为x+r,最上面为y+r,最下面为y-r,将这个矩阵复制一次,方便之后对原来的矩阵进行修改。好久没刷题了,写了几个简单的模拟题和高精度题温习一下。原创 2024-07-02 18:58:09 · 194 阅读 · 0 评论 -
6.18总结
给定一个能达到数据范围的斐波拉契数组,包含所有数据范围内的斐波拉契数,再进行几个特判。需要得到每个(x,y)下的最大公约数,再找出一定的规律。01背包问题,就题目改了一下,直接用模板就行。设两个方程直接解出来就行。原创 2024-06-18 21:27:39 · 224 阅读 · 0 评论 -
6.13总结(省赛排位赛1)
当前一个数k在集合m里,由题可知2k+1,3k+1都在集合里,每一个数又可以延伸出两个数到集合里,每判断一个数k时,顺便对2k+1,3k+1也进行判断,当这个数大于我们输入的数时可知是不可能有结果的,因为无论如何k的倍数都是大于k的,而x小于k。利用并查集和弗洛伊德,对需要传递的对象都进行标记,经过处理后使他们的父亲发生相应的改变,最后对数组进行查询累加即可。其实就是一个斐波拉契数列,当前项=前两项之和,先将范围内的数全部存起来放进一个数组,再进行累加查询。简单的二分查找题,直接套模板都行。原创 2024-06-09 21:47:07 · 294 阅读 · 0 评论 -
6.6小结
将每次的字符串进行比对得到最小的(反转后添加的字符串和当前的字符串)一次最多只能走一步或者两步,只需要判断后面两个是不是都是*就行。加上每两个时间之间的间隔。原创 2024-06-06 17:02:19 · 241 阅读 · 0 评论 -
6.4总结
和逆序数有点相似的感觉,因为要得到的是K,所以把(1~n-k+1)放到最后面,把最后k+1位放到最前面,因为最后k+1位都是递增的,所以会产生k个。每个字母尝试一次花费1分钟,将每个字母所花费的时间进行记录,最后和其需要的对应时间进行对比,若在时间范围内就进行+1。看题解写的(思路没打开)原创 2024-06-04 19:06:23 · 289 阅读 · 0 评论 -
6.2总结
它首先调用 split 函数将 IP 地址按点号分割成四部分,然后将每个部分转换为整数,再将每个整数转换为对应的 8 位二进制数,最后将这 4 个 8 位二进制数组合成一个 32 位的 bitset。4.main 函数:该函数首先读入一个整数 n,表示要判断的 IP 地址和子网掩码的组数。然后,它循环 n 次,每次读入一个 IP 地址和一个子网掩码,调用 judge 函数进行判断,并输出结果。总体来说,这段代码是一个简单的 IP 地址匹配器,用于判断一个 IP 地址是否匹配给定的子网掩码。原创 2024-06-02 20:29:13 · 396 阅读 · 0 评论 -
5.30总结
数据范围还不是很大,开一个10000大小的数组就可以,用这个数组来记录从2到10000的所有质数,用一个数来进行总和,放进一个循环一直加下去直到总和大于数据,再进行判断。看成一个平面,坐标的x,y点用分别用一个数组来记录,x,y的变化也分别用一个数组来记录即可。登录 - Luogu Spilopelia。原创 2024-05-30 21:19:25 · 230 阅读 · 0 评论