- 博客(131)
- 收藏
- 关注
原创 数论——中国剩余定理(CRT)
今天也是简简单单学了一下CRT,我感觉这个东西考的不多,其实理解一下,考的时候能记住就OK了,但是还是要理解其中的奥妙话不多说,先来看中国剩余定理。
2024-09-05 16:02:38 790
原创 博弈论上篇(巴什博奕,尼姆博弈,威佐夫博弈,裴波那契博弈)
今天上午也是小小的复习了一下这个博弈论,这个博弈论说难也难,说不难也不难,模版很简单,记住就可以拿下,但是一般比赛的时候从来不会考模版,基本上还是需要自己思考,但是学了肯定比不学强,骄兵必败!!!加油。
2024-09-02 16:32:36 562
原创 AtCoder Beginner Contest 366(D~E题解)
闲来无事去vp了一下之前放假没打的比赛,感觉需要总结的也就这两题吧,a,c都是水题,b只不过是实现有一点难,并不是很难写,d是一个需要自己推的三维前缀和,e也是一种前缀和,我当时没想到,看了大犇的代码才知道还能这么做题意:给你一个三维数组,然后给你q次询问,每次询问有一个起始位置和终止位置,然后问你这个的三维前缀和是什么思路:用容斥原理推出三维前缀和的预处理式子和后面的结果式子。
2024-08-29 10:14:20 1034
原创 线段树——通过维护区间前缀和后缀的到最终结果类的题目
第一次看这道题的时候,我根本就没有想到该如何用线段树去解决这道问题,想用动态规划,但是一直在修改如果每次都进行一次动态规划,那么时间必然会超限的,然后我这个蒟蒻就在题解区里看到了大犇的写法,只能用巧妙来形容。思路:我们在线段树里,用sum去统计这个区间内01序列的最长长度,lsum去表示前缀01序列的最长长度,rsum表示后缀01序列的最长长度。,即a[mid]==a[mid+1],那么sum必然就是左区间的最长前缀或者右区间的最长后缀。然后我们需要分析,对于sum来说。
2024-08-28 10:26:36 384
原创 树章节习题
归根到底,其实还是最近公共祖先的思想,但是我们这道题要想清楚的是,我们如何判断有两条路径相交,一方面是如果两条路径相交,那么第一条路径的公共祖先一定会在第二条路径上,但是我们如何去判断一个点在一个路径上,因此我们需要用到深度数组,如果其公共祖先在a,b这条路径上,那么a~公共祖先的距离+b~公共祖先的距离=a~b的距离。我们每次要在树上对每次提问的路径进行修改,那么我们这个是点修改,因此我们需要将经过的两个点的差分数组dif++,最近公共祖先和其父节点dif--sum数组,用于统计每个子树上总节点的累加。
2024-08-25 10:56:12 309
原创 最近公共祖先(LCA),树上差分,树的直径总结
最近也是一不小心就学到了,这方面确实太不行了,也该开始学习一下了,那么话不多说,进入今日份的树论学习,直接开冲。
2024-08-23 22:41:51 403
原创 Codeforces Round 963 (Div. 2)(A~C题解)
思路:用一个map统计a,b,c,d的出现次数,然后在最后计算总分的时候只需要去看,当前选项的出现次数和n去最小值即可。
2024-08-05 10:11:31 606
原创 Toyota Programming Contest 2024#8(AtCoder Beginner Contest 365)(A~E题解)
这次abc还是四个题,40分钟做了四个,由于前面三个题比较水,所以用的时间不多,第四个是忘了初始化,检查了十几分钟才发现错误,第五个拆位思想给忘了,后面去看了一下之前的那个博客才过的题意:就是说给你一个年份,让你去判断那个年份有多少天思路:4的倍数但是不是100的倍数是366天,400的倍数是366天,除了这两种情况都是365天。
2024-08-04 12:22:27 416
原创 AtCoder Beginner Contest 350(A~D题解)
这题就是说,给你一个字符串,确保前三个字母是ABC,后三个字母是[1,349]中的任意一个数,但是不能是316跟着模拟一遍就可以了。
2024-08-02 00:48:00 406
原创 树上dp学习总结2
今天也是侥幸刷了两道树上dp的问题,第一个还算简单,但是第二个真的可以说是我碰到的蓝题之首,做了一个晚上我只能留下了不争气的口水(太饿了,该吃夜宵了)思路:这题是我真没想到的,巨难的题目,五个状态转移方程,看了大犇的代码才会写,只能说我还是个小蒟蒻。f[i][3]表示可以覆盖到从节点i向上-1层的最小消防站个数。f[i][0]表示可以覆盖到从节点i向上2层的最小消防站个数。f[i][1]表示可以覆盖到从节点i向上1层的最小消防站个数。f[i][2]表示可以覆盖到从节点i向上0层的最小消防站个数。
2024-07-31 23:18:43 508
原创 Educational Codeforces Round 168 (Rated for Div. 2)(A~D题题解)
思路:想要最长的时间,那么肯定就是,在中间插入一个不同的字符,直接在最后插入一个和原字符串最后一个字符不同的字符。
2024-07-31 12:09:13 577
原创 换根dp——练习2
因此我们只需要找到第一次dfs先预处理找到所有边包含其子节点,然后我们让1先作为根节点找到,然后进行第二次dfs进行动态规划,换根寻求最大值。题解:这题也是比较经典的,我们在第一次dfs中先预处理出所有以1为根结点,所有点的需要翻转的路线,在第二次dfs中,我们会发现状态转移方程。我们会发现换根过后,我们的状态转移方程为dp[u]=dp[v]-sz[u]+n-sz[u],如果v是父节点,u是子节点,如果路径是v->u,那么f[u]=f[v]+1;反之,则是f[u]=f[v]-1;
2024-07-26 00:05:39 150
原创 换根dp(思路+例题+总结)
树上 DP 中的换根 DP 问题又被称为,通常不会指定根结点,并且根结点的变化会对一些值,例如子结点深度和、点权和等产生影响。通常需要两次 DFS,(可能是节点数,也有可能是节点上的权值和),点权和之类的信息,。我们在这里说明一下,两次dfs都要做什么我们的第一次dfs是为了我们的第二次dfs是为了。
2024-07-24 23:23:41 393
原创 树上dp总结
题解:这题类似背包思想吧,有两种状态,只有来与不来,本人来了,那么下属一定不来,本人不来,下属可以来可以不来,f[ i ] [ j ]表示对于 i 这个人,来或者不来的最大价值。题解:树的每一个节点的值都是1,因此我们的dp[ i ]的初始化都为1,然后 我们的状态转移方程为。我们的状态转移方程就是dp[ v ]+=(0LL,dp [ u ]) (v是父节点,u是子节点)dp[ i ] [ j ]表示的是以i为根节点,子节点数为j的最大价值。
2024-07-24 15:47:12 323
原创 单调栈(随缘复习到了,顺手刷了)
也是不知道为什么突然又复习到单调栈了,所以顺手刷了三道题,总结一下思路:这题是要求每个子区间里面的最大值和最小值的差,我们一开始想的必然是纯暴力呀,但是一看这数据,嚯!O(n^2)的时间复杂度,这不直接炸了,因此我们需要想一个O(n)的算法或者O(nlogn)的算法我们再次分析题意,我们是否可以将题目转换一下,变成先求所有区间的最大值,然后再一起减去所有区间的最小值,然后就变成了,那么就可以用单调栈了,时间复杂度为O(n)我们用四个数组分别存储每个点的右边第一个比他大的。
2024-07-22 20:13:48 500
原创 Codeforces Round 960 (Div. 2)(A~D题解)
这次比赛还是三道题,但是由于每道题没有注意到细节都是WA了几次,吃了五次罚时也是老实了,这次又是被打吐了,话不多说,直接看题吧题解:刚进去两分钟就交了第一次,我以为只需要看最大值的奇偶性和次大值的奇偶性即可,没想到是要看全部的,只有有一个数是奇数就证明有必胜法则,因此我们用一个map去统计出现的次数即可题解:这题也是刚看了不到五分钟我就以为想到了正解,但是也是很愉快的被wa了,因为只考虑到了x,y的位置上是1,而没有去确定其左边和右边的数的值,也是WA了两发。
2024-07-21 09:25:28 532
原创 扫描线算法——计算几何问题求解
有时候我们会碰见一些求n个矩形的面积并(就是说n个矩形,每两个矩形之间都有可能重叠,然后问你这n个矩形的总占地面积为多少),或者周长并(就是说n个矩形拼成的最外围轮廓的周长和)对于这种问题,在最初的做题中用的都是去维护区间去求解最后的面积并或者周长并,但是在后面就有了本篇讲述的扫描线算法不论是线段树+离散化,还是扫描线算法,其算法的时间复杂度都为O(N*logN)于线段树+离散化扫描求解过程有点像积分。
2024-07-20 16:04:03 1131
原创 离散化总结
那么首先来说一下 ,何为离散化,离散化的本质是建立了一段数列到自然数之间的映射关系(value -> index),通过建立新索引,来缩小目标区间,使得可以进行一系列连续数组可以进行的操作比如二分,前缀和等…单论定义的话,确实还是有些许抽象的,因此我在这里给出一个实例。
2024-07-18 10:20:19 571
原创 Codeforces Round 958 (Div. 2)(A~C题解)
先来看14,这个数据二进制表示 14(1110),12(1100),10(1010),4 (0100),这个你发现了什么,你是不是发现,倒数第二个数和倒数第三个数,都是在最后一个数的基础上各自消失了一个1,然后我们的然后第一个数,是在第三个数的基础上消失了1位1,思路:我们完全可以将01序列里面的所有连续的0变成一个0,然后最后统计0的个数和1的个数,最后判断,如果1的个数大于0,则输出YES,如果1的个数小于等于0的个数,那么就是NO。反之再测试23依然可以得证这个关系,因此可以知道这个关系是正确的。
2024-07-16 15:35:48 893
原创 7.16做题总结
今日也是让我看到了繁神的ACM历程,确实,我觉得繁神的历程里面确实有一句很好不想打算法竞赛了。这是因为有别的事情要做,不是因为我打不动。不想打比赛凌晨两点才睡了。因为我会困。不想在群里和高水平选手水群了,因为我想独处。不想去打区域赛,和 ICPC 选手多交流什么了,因为感觉中国选手都没几个好好打的。不想出题了,一是因为我菜,二是因为我没有时间。不想一年拉着队友训练三百场,因为我更想读读论文。
2024-07-15 22:02:32 544
原创 7.14做题总结
今天啥也没学,我也算是废了,随便从我写的题里面抽两道总结一下吧这题我们的暴力解决方法,为枚举x和z然后通过x+z/2=y.来得到y,但是我们发现这中做法的时间复杂度为O(n^2),很明显对于我们这题来说时间复杂度是一定超了的,那么我们再想,会不会有一些可以简单复杂度的方法,那么我们只能用到我们的分治思想了,因为要求的是x,z的颜色是要一样的,那么我们就让他一样,给每个颜色进行分组,分成m组,然后再对里面的编号进行分奇偶处理,因为x与z是同奇同偶的,因此,总共会分成m组,那么我们来推一下公式是什么。
2024-07-15 00:04:29 301
原创 Codeforces Round 957 (Div. 3)(A~E题解)
这次比赛只能用抽象来形容,前五道题都没有什么算法,都是思维加模拟都能过,然后第四题卡住了,第五题不知道为什么做出来的人那么少,就是纯暴力就能过,但是没抓住上分的机会,有些可惜,但是还好打完比赛把第四个重新补出来了,感觉大模拟的题还是不太擅长,以后可以练习一下。如果是水,判断水和下一个木头的位置,如果中间存在鳄鱼,那么也是不可能的,如果没有鳄鱼,则需要判断如果游泳,会不会超过k,如果总游泳没有超过k,则可以,更新old的first和second即可。每次选取出来三个数里面最小的一个加上1就可以。
2024-07-12 03:02:03 1806 6
原创 线段树例题2
今天是第二次做线段树的例题,也是小做了几个。然后顺便来说一下pushdown的作用首先来说以下为什么以及都不用到懒标记,因而不需要pushdown,因为本身就带有一个单点,所以修改或者查询的时候每次都可以抛弃一半的线段树,因而时间复杂度是一定可以达到 log 层的,但是对于。
2024-07-09 21:17:48 825
原创 Codeforces Round #956 (Div. 2) and ByteRace 2024(A~D题解)
这次比赛也是比较吃亏的,做题顺序出错了,先做的第三个,错在第三个数据点之后,才做的第二个(因为当时有个地方没检查出来)所以这次比赛还是一如既往地打拉了那么就来发一下题解吧题意:对于1
2024-07-08 09:59:31 1314 3
原创 拓展欧几里德算法+乘法逆元相关例题
今天也是随手刷了几道求逆元的题目,无非也就是1.费马小定理2.欧拉定理3.拓展欧几里得4.线性运算但是呢?题目都会与相关的场景结合一下,而不是直接问你乘法逆元是个啥?当然了简单题也不是这样问的,那么现在就来说一下今天做的题目吧题意:就说给你两个数一个n一个p,然后 求1~n的所有数对于p的乘法逆元,那么就只能用到了那么我们在这里给出数学推理,设ans为逆元数组,ans[ i ] 表示 i 的逆元那么我们可以说两边同乘i的逆元 * r的逆元得出代入k的值和r的值。
2024-07-07 22:11:25 716
原创 数论学习1(欧几里德算法+唯一分解定理+埃氏筛+拓展欧几里德+同余与模算术)
今天也是小小的开始学习数论方面的知识了,首先数论的入门章节必然是和。
2024-07-05 22:29:51 654
原创 开灯问题(数学思路)
是的,你没有看错,就是简单的开灯问题,难度仅为入门,但是这题在做的时候我也仅是找到了规律,并没有证明出来时为什么,直到看大犇的证明,我才发现,我在数学上真的还是太拉了,话不多说还请看题。题意:就是说给你n个灯,n轮游戏,到了第 i 轮 ,所有因数有 i 的都要进行一次操作(换言之,i 的倍数都要进行一次操作),然后问你哪些灯是开的,哪些灯是关的。,直到我看到了数据为2^40,我才认为这题是有规律的,一开始我是自己在纸上画到了9,然后发现了完全平方数的规律,然后才做出来的。为:(a1+1)*(a2+1)*
2024-07-05 09:43:22 478
原创 线段树求区间最值问题
线段树去求区间最值问题,一般用于区间内的数没有顺序,不能使用二分的时候可以考虑使用线段树来求最值问题,时间复杂度在查询和修改的时候也为O(logN)可以很大节约时间开销同时在其中建树的时候也是有讲究的,其中的sum为区间内的最值建树代码if(l==r)return;return;return;
2024-07-04 22:10:47 647
原创 Codeforces Round 955 (Div. 2, with prizes from NEAR!)(A~C题解)
这场比赛怎么说呢,一开始打的还算好,能进前1000,但是后面就被卡住了,这个确实没办法水平还是不够,学过的还是没想起来,后面继续练题解:水题一个,想要在过程中出现平局的情况,只要两人的得分不存在大小交换(就是说一开始一队分高,后面二队分高)这种情况,就有可能会没有比分相平的情况。
2024-07-04 21:12:25 325
原创 题解(A~D)
这次vp的比赛,我感觉前四道题虽然一点算法也没有,但是就是很难去做,要用数学思维去处理第五题终究还是没有尝试,只能说才疏学浅吧,我只能说话不多说,一起来看题目题意:一开始给你三个点的位置,然后问你,在x轴的什么位置才会出现,三个点到那个位置的最小值思路:很明显当x的位置,为三个点的中间的点的位置的时候有最小值,我们可以画图找出一个路程公式,假设三个点的坐标为x1,x2,x3,然后我们找的位置的坐标为x。
2024-06-27 23:54:22 405
原创 预备役二招算法测试题解
题意:就是说给你n个矿石,然后,这n个矿石都有自己的重量w,以及其价值v,我们有一种判断机制,就是说给你m个区间范围,每次给你一个左边界L和右边界R,我们的计算机理是,这个区间内的大于规定筛选重量W的数量,乘以大于筛选重量的价值,然后将总的算出来的y累加到一起,看看和规定的标准值S最小差多少,输出最小的参数W。题解:能够拆开并且拼凑到一起的边一定是偶数,因此,我们就是单纯去模拟就可以了,如果是偶数就去分开,将其拼凑在一起,判断和之前的是否形成了不一样的矩形(纯粹的模拟题,题目上咋说,你去就咋做)
2024-06-24 12:49:35 650
原创 单调队列总结
其实单调队列就是用于求一个区间的极值的一种方法,我们可以利用单调队列去处理某一个区间里面的极值问题,然后就会衍生出一种滑动窗口的思想。
2024-06-17 17:57:03 368
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人