- 博客(84)
- 收藏
- 关注
原创 牛客周赛Round 88 补题G(树上前缀和,树形dp)
例如:当x=5,y=3时,x的叶子节点的数组下标为2~3,所以当我们求其他叶子节点的最大价值时,就是在求区间【1,Lx-1】的前缀和最大值,和区间【rx+1,idx】的后缀最大价值。2.当我们将x接到y处时,整棵树最大叶子节点的价值将是max(除x以外的叶子节点价值,x叶子节点更新后的价值,x的父亲节点是否为新的叶子节点的价值)更新后的x叶子节点价值为pre[y]+x的子树最大价值,所以我们还需要通过自底向上求出每个节点子树的最大价值。如何求除x以外的叶子节点价值呢?
2025-04-09 15:05:22
322
原创 钉耙编程(3)补题
主要还是运用哈希映射+并查集的思想,我们可以对部落设置两个数组,h[a]用来表示编号为a的部落在哪个位置上,tribe[h[a]]表示在h[a]位置上的部落编号为tribe[h[a]]。然后在查询a野蛮人所在部落编号时,我们先用find查找其所在部落位置即合并之后的位置,再输出tribe[],就是这个位置上的编号啦。思路:我们可以将可以面试的公司放入一个队列中,并且每次增加新的能力要求。我们可以用m维的优先队列,每次能力更新后,从最小值开始判断是否 有满足条件的公司。思路:一道类似的题目。
2025-03-27 20:41:24
451
2
原创 牛客周赛Round 84
思路:本题要我们求p/q mod M ,即p*(q的逆),q为排列数,我们可以很容易得到,即 n!种摆放方式,再将a[i-1]a[i]插入n-1个空中的任意一个,就可以得到a[i-1]a[i]在(n-2)!个排列中做出了贡献,而a[i]a[i-1]的贡献与a[i-1]a[i]一样,那么我们要计算出(a[i]-a[i-1])+(a[i]-a[i-2])+(a[i]-a[i-3])+...+(a[i]-a[1])的和,那么这个式子化简一下就是(i-1)*a[i]-pre[i-1],最终我们得到的结果p/q=
2025-03-10 12:31:37
395
原创 CF The Walkway
(为什么pre[i+1]-pre[i-1]-1需要减一,因为我们要计算第i个点对区间(v[i-1],v[i+1])的影响,不能包含第i+1个特殊点,所以减去的是第i+1个特殊点。思路:先预处理出每个区间(左开右闭)需要吃多少个饼干,用pre前缀和数组统计前i个特殊点区间吃多少个饼干,枚举第i个特殊点删掉后需要吃多少块饼干,例如我们要删掉第i个特殊点,现在可以删除一个特殊点,问这个人最少吃多少饼干以及有多少种删除方式。一条路上有几个特殊点,一个人会在以下这几种情况吃一块饼干。
2025-03-07 15:00:36
266
原创 2025“钉耙编程”中国大学生算法设计春季联赛 - 热身赛
思路:时间为8s,所以可以考虑暴力做法,我们会发现这三种操作不涉及进位也就是说我们可以先预处理出前面的n-1位在这三种操作下的所得结果,再加上这一位,例如yu[i][j]=yu[i/a][j/a]*a+min(i%a,j%a),表示i和j进行与运算所得结果,i,j的范围为0~1023,超过的部分用递归进行求解,然后我们定义bool dp[i][j]为第i次操作能得到j,所以我们只需用第i-1次操作得到的每个数与ai进行三次运算即可,最后遍历dp[n][i]求和,即得到最终结果。补题1006和1009。
2025-03-02 11:03:12
906
原创 牛客练习赛B题(前后缀)
我们将这一步看作分界线,枚举每一条分界线计算出这条路径的元素和,然后我们考虑交换列的情况,(1)分界线左边的列与分界线右边的列交换 (2)分界线左边的列与分界线交换 (3)分界线右边的列与分界线交换,同时我们发现左边的列交换到右边只与下面的数字有关,右边同理,所以我们还需要维护一个前后最大差值的数组,pr[N],和sf[N]。由于数组空间大小为1e6且有多次询问,每次询问得重置数组,为了减小不必要的时间和空间浪费,我们选择每次开vector(n+5)的大小。
2025-02-22 10:48:51
172
原创 方豆子(递归)
所以为了知道这四个小正方形是如何由字符组成的,所以每次由当前这个正方形递归到这四个小正方形,dfs(r1,c1,rm,cm,-good),dfs(r1,cm+1,rm,c2,-good),dfs(rm+1,c1,r2,cm,-good),dfs(rm+1,cm+1,r2,c2,good)。赛后看了大佬的讲解知道要将这个图形看成由四个小正方形组成的大正方形,递归参数可以设置成(r1,c1,r2,c2,good)表示正方形的左上角坐标和右下角坐标以及当前这个正方形的状态(好/坏),如下图所示。
2025-01-27 20:03:07
254
原创 小A弹吉他(推公式+二分)
例如,我们想要让 MEX 等于 4,构造的总和最小的序列是 1,1,1,2,2,3,这样 t1=3,t2=2,t3=1。尽量大,我们应该让所有ti不为0的数都不一样,同时我们想要所有数的和尽量小,根据贪心策略,对于越大的。对于每个询问,可以二分出最大的一个不超过 M 的 vk,输出 k+1 即可。注意二分过程不要溢出了。P.S. 由于这个数这是 O(k3) 级别的,也可以暴力求出所有在 10^18以内的 vk。因此,当 MEX等于 k+1 时,M 的下限应该是。引用出题人思路:为了让。
2025-01-23 12:41:44
222
原创 新年好(Dijkstra+dfs/全排列)
2.计算以1为起点的这6个数的全排列,哪种排列方式所得距离最小,也可以使用dfs。思路: 1.先预处理出1,a,b,c,d,e到其他点的单元最短路,也就是进行6次Dijkstra。2.Dijkstra+全排列。
2025-01-22 23:09:23
415
原创 牛客周赛Round 76 F同位序列
Round76比较简单,最后一题不涉及到什么算法,就是道模拟题,wa了几发最后还是让我混过去了🤭。其实就是一个规律:将整数X的二进制中第一出现零的位置pos0且在这个位置之前出现了1(位置为pos1,同时这个1要是离这个0最近的1),那么在pos1之前的所有1都要放到低位去。例如88=(1011000)2 ——> g(88)=97=1100001。所以我们只需要求pos0,pos1,和pos1之前出现了几个1,并将他们转换为十进制来计算。
2025-01-20 23:42:03
341
原创 牛客周赛 Round 71 补题DE
只需要全排列枚 333 个块填的是什么颜色 {a,b,c},然后枚举每一个位置填什么,下一个位置的颜色可以是当前位置颜色的后面颜色,例如:当前颜色是 b,那么下一个位置的颜色就可以是 b、c,然后判断一下选定的颜色和下一个位置的颜色是否一致,加上花费时间即可,然后 dp转移。思路:先将数量大于等于2的长度 存到vector数组中,然后再暴力枚举底和腰,用海伦公式求三角形的面积,腰从大到小枚举,一旦枚举到符合条件的就退出该层循环,如果2*腰的长度<=底也要退出循环,后面的腰长度更小更不可能构成三角形。
2024-12-09 12:53:56
312
原创 P4645 [COCI2006-2007#3] BICIKLI(Tarjan+topsort求到某点的方案数)
进行拓扑排序时的点的入度,是从s出发所能经过的所有点与从t出发在反图上所能经过的所有点的交集的这张图上的入读,那些不能既被s经过又被t经过的点到这张图上的边所提供的入度是无用的。我们考虑输出inf的情况,可以发现当从1出发到2经过的任意一个点处于一个环内时,路径条数是无穷多的。有向图上从s到t的经过点,就是从s出发所能经过的所有点与从t出发在反图上所能经过的所有点的交集。
2024-12-06 16:25:15
411
原创 P3916 图的遍历(Tarjan缩点和反向建边)
思路:先运用Tarjan算法得到每个连通块中最大的编号,然后对每个连通块进行缩点重新建图,进行dfs,得到缩点后的连通块能够达到的最大编号。既然要计算每个点能走到的最大编号,我们可以直接从大编号 开始搜索与它关联的路径,该路径上的点均为大编号。写法一:Tarjan。
2024-12-03 11:29:05
747
原创 P10298 [CCC 2024 S4] Painting Roads(dfs给边染色)
【代码】P10298 [CCC 2024 S4] Painting Roads(dfs给边染色)
2024-11-30 23:31:25
332
原创 P2661 [NOIP2015 提高组] 信息传递(并查集求最小环)
【代码】P2661 [NOIP2015 提高组] 信息传递(并查集求最小环)
2024-11-28 11:23:39
366
原创 P1265 修建公路(prim算法)
题目要求一个城市只能选择一个离它最近的城市修建道路,所以不能使用kruscal算法,因为kruscal算法是以边为中心,按照kruscal算法来做的话,只要边足够小,一个城市就可以往多个城市修建道路,这显然不符合题意,所以考虑使用prim算法。
2024-11-22 10:06:06
324
原创 CF862B Mahmoud and Ehab and the bipartiteness(二分图的性质)
添加的边数就是cnt[1]*cnt[2]-n+1条。一个二分图最多有cnt[1]*cnt[2]条边。
2024-11-18 21:31:32
204
原创 蓝桥杯第22场小白入门赛
刚好牛客周赛和蓝桥杯周赛时间撞了,于是毅然决然选择了打牛客,结局是本蒟蒻被牛客薄纱/(ㄒoㄒ)/~~好吧,然后第二天就来水一水蓝桥杯了(bushi),小白入门赛和前几次一样,6道题只能写5道(什么时候能让我AK,AK了我就不是小白了)相信大家闭着眼睛也能写出来 /(ㄒoㄒ)/~~
2024-11-18 15:49:33
1178
原创 BFS与Dijkstra的区别
(2)Dijkstra算法时间复杂度:朴素版的时间复杂度为O(n*n),堆优化版的时间复杂度为O(mlogn)所以根据以上对比,我们会发现在某些情况下bfs算法的时间复杂度会比Dijkstra算法小很多。,其中V为顶点数,E为边数。这是因为在最坏情况下,需要访问所有的顶点和边才能完成遍历。这两种算法都是常见的最短路算法,但在做题中使用哪种算法往往与其时间复杂度有关。
2024-10-24 23:36:17
288
原创 牛客周赛 Round 30
我们可以先将 x,y 除以最大公约数,使它们变为最小质数,然后求l到r的最大下界和最小上界。前面几道签到题用最近学的java写的,学得不多只能用java写前两题🤣。——一个数a在区间[1,x]中的倍数个数为x/a个。
2024-09-13 14:38:12
351
原创 PTA团体程序设计天梯赛
L1-2 九牛一毛L1-3 小孩子才做选择,大人全都要12 18输出样例:18 30^_^输入样例:12 -18输出样例:12 0T_TL1-5 试试手气。
2024-08-26 22:53:08
1412
原创 暑期算法训练
思路:贪心+排序,首先判断是否存在三个相同的数,因为三个相同的数会产生这种情况a[i]*a[i+1]=a[i+1]*a[i+2],若存在,则输出NO,反之从小到大排序,若存在两个0,则NO,反之则输出相应序列
2024-08-24 16:46:45
582
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人