- 博客(66)
- 收藏
- 关注
原创 AtCoder Beginner Contest 401
f[i][j]=max(max(len1,len2),ans1[i]+ans2[j]+1) 某棵树的直径是原本的树的直径和两个点到最远处的距离之和+1的最大值。我们使用二分来找到一棵树到另一颗树两个点的最远处距离的和+1>=max(len1,len2) 的分界点,分界点前直接加点的数量*最大直径,分界点及分界点后加第一颗树的距离数量+第二颗树分界点后的前缀和。先把o的两边的位置的?改为 . 当o的数量等于可填写的最多的数量时,长度为偶数的连续区间是?,奇数则直接按照o?直接边遍历边更新,记得取模运算。
2025-04-13 14:25:29
179
原创 第5关:求解图的m着色问题
【问题描述】给定无向连通图G和m种不同的颜色。用这些颜色为图G的各顶点着色,每个顶点着一种颜色。如果有一种着色法使G中每条边的两个顶点着不同颜色,则称这个图是m可着色的。图的m着色问题是对于给定图G和m种颜色,找出所有不同的着色法。【输入格式】第1行有3个正整数n、k和m,表示给定的图G有n个顶点和k条边,m种颜色。接下来的k行中,每行有两个正整数u、v,表示图G的一条边(u,v)。【输出格式】程序运行结束时,将计算出的不同的着色方案数输出。根据提示,在右侧编辑器补充代码,计算并输出所有不同的着色法。
2025-03-27 23:35:10
243
原创 第6关:逐位整除数探索
本关任务:n位逐位整除数:从其高位开始,高1位能被1整除(显然), 高2位能被2整除,…,整个n位数能被n整除。输入n,试探索所有的n位逐位整除数并输出。根据提示,在右侧编辑器补充代码,试探索所有的n位逐位整除数并输出。例如:102450就是一个6位逐位整除数。要求:用回溯递归来完成!
2025-03-27 23:33:05
229
原创 第4关:求解n皇后问题
本关任务:在n×n格的棋盘上放置彼此不受攻击的n个皇后。按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。n皇后问题等价于在n×n格的棋盘上放置n个皇后,任何2个皇后不能放在同一行或同一列或同一斜线上。求有多少种摆放方式,每种方式的具体摆法?根据提示,在右侧编辑器补充代码,求有多少种摆放方式,每种方式的具体摆法?第1个解:(1,2) (2,4) (3,1) (4,3)第2个解:(1,3) (2,1) (3,4) (4,2)dfs搜索即可,细节见代码(问题可以写在评论区)
2025-03-27 15:08:46
496
原创 第3关:用回溯法求0-1背包问题
本关任务:给定n种物品和一背包,背包的载重量为C。设物品i的重量是wi,其价值为pi。每件物品要么整体装入背包,要么不装,不能拆开装。问应如何选择装入背包的物品,使得装入背包中的物品的总重量不超过C、总价值最大?根据提示,在右侧编辑器补充代码,计算并输出装入背包中的物品的总重量不超过C的最大价值。要求:用递归回溯来实现,回溯过程中加入剪枝!总重量=6,总价值=8。
2025-03-27 14:32:52
651
原创 第6关:部分快速排序-用分治法实现
基本思想:在待排序的n个元素中任取一个元素(通常取第一个元素)作为基准,把该元素放入最终位置后,整个数据序列被基准分割成两个子序列,所有小于基准的元素放置在前子序列中,所有大于基准的元素放置在后子序列中,并把基准排在这两个子序列的中间,这个过程称作划分。本关任务:输入正整数k,在数组(无序)中找出第k个最小的数。(1<=k<=n),用快速排序的基本思想来完成!然后对两个子序列分别重复上述过程,直至每个子序列内只有一个记录或空为止。为了完成本关任务,你需要掌握:快速排序的基本思想。
2025-03-20 14:48:24
320
原创 第5关:直接插入排序
设大问题f(a,n,i)用于实现a[0..i](共i+1个元素)的递增排序,则小问题f(a,n,i-1)用于实现a[0..i-1](共i个元素)的递增排序。本关任务:对于给定的含有n个整数元素的数组a,采用直接插入排序法对其按元素递增排序,设计相应的递归排序算法。根据提示,在右侧编辑器补充代码,并写好递归排序算法。
2025-03-20 14:47:31
210
原创 第4关:限制条件排队购票
一场球赛开始前,售票工作正在紧张进行中。每张球票为50元,有m+n个人排队等待购票,其中有m 个人手持50元的钞票,另外n个人手持100元的钞票。这m+n个人排队购票时,特别规定第5位为持50元,第8位为持100元,求出这m+n个人排队购票,使售票处不至出现找不开钱的局面的不同排队种数。(约定:开始售票时售票处没有零钱,拿同样面值钞票的人对换位置为同一种排队。根据提示,在右侧编辑器补充代码,求出这m+n个人排队购票,使售票处不至出现找不开钱的局面的不同排队种数。本关任务:带限制条件的排队购票问题。
2025-03-20 14:36:08
355
原创 第2关:排队购票-常规排队(用递归实现)
一场球赛开始前,售票工作正在紧张进行中。每张球票为50元,有m+n个人排队等待购票,其中有m 个人手持50元的钞票,另外n个人手持100元的钞票。求出这m+n个人排队购票,使售票处不至出现找不开钱的局面的不同排队种数。(约定:开始售票时售票处没有零钱,拿同样面值钞票的人对换位置为同一种排队。根据提示,在右侧编辑器补充代码,求出这m+n个人排队购票,使售票处不至出现找不开钱的局面的不同排队种数。
2025-03-20 14:19:18
287
原创 第1关:汉诺塔游戏
(1)有三根桩子A、B、C。A桩上有n个圆盘,最大的一个圆盘在底下,其余圆盘一个比一个小,依次叠上去。根据提示,在右侧编辑器补充代码,求解n个圆盘从A桩全部移到C桩上的移动次数。(2)每次只移动一块圆盘,规定小盘的只能叠放在大盘的上面,而大盘不能叠放在小盘的上面。(3)目标是把所有n个圆盘从A桩全部移到C桩上,如图所示。试求解n个圆盘从A桩全部移到C桩上的移动次数。本关任务:汉诺塔游戏。
2025-03-20 14:12:38
234
原创 Educational Codeforces Round 176 (Rated for Div. 2)
签到题B.Array Recoloring手推一下可以发现,答案其实就是前k+1大的数 。但是需要注意的是需要特判一下 k==1 的情况。此时最后一个数只能从两侧选。C.Two Colors枚举每一个数,二分找到和大于等于n的第一个数,然后就是求这后面满足条件的数字的条件和。条件就是每一个数减去能覆盖另一种颜色的数量(只需要保证另外一种颜色至少保留一个即可)。这个过程可以使用前缀和来优化。详情见代码,另外让初始的每一个颜色都小于等于n-1,这样就可以直接求得这个颜色对于其他颜色的覆盖情况
2025-03-18 23:29:00
303
原创 第6关:牛牛鱼缸-附加题
输入描述:输入数据包括3行,第1行为新放入鱼的尺寸范围[minSize,maxSize](1<= minSize, maxSize<=1000),以空格分隔,第2行为鱼缸里面已有鱼的数量n(1<=n<=50),第3行为已经有的鱼的大小fishSize[i](1<= fishSize[i]<=1000),以空格分隔。本关任务:问题描述:牛牛有一个鱼缸,鱼缸里面已经有n条鱼,每条鱼的大小为fishSizei,牛牛现在想把新捕捉的鱼放入鱼缸。输出描述:输出有多少种大小的鱼可以放入这个鱼缸。
2025-03-13 15:58:56
447
原创 第5关:猴子爬山
本关任务:一个顽猴在一座有n级台阶的小山上爬山跳跃,猴子上山一步可跳1级,或跳3级,试求上山的n级台阶有多少种不同的爬法。根据提示,在右侧编辑器补充代码,求上山的n级台阶有多少种不同的爬法。
2025-03-13 15:46:13
382
原创 第4关:双关系递推数列
根据提示,在右侧编辑器补充代码,求集合M中的元素从小到大排列后所得序列的第n(n<10000)项。试求集合M中的元素从小到大排列后所得序列的第n(n<10000)项。可以关注我,会一直更新头歌的练习。(3) 再无其它的数属于M。
2025-03-13 15:40:15
313
原创 第3关:完美综合运算式
以下含乘方(a^b即为a的b次幂)、加、减、乘、除的综合运算式(1)的右边为一位的非负整数f,请把数字0,1,2,…输入非负整数f(0≤f≤9),输出相应的完美综合运算式。根据提示,在右侧编辑器补充代码,输出相应的完美综合运算式。满足上述要求的表达式(1)称为完美综合运算式。本关任务:完美综合运算式。
2025-03-13 15:26:09
377
原创 第1关:整数对
设b是正整数a去掉一个数字后的正整数,对于给出的正整数n,寻求满足和式a+b=n的所有正整数对a,b。根据提示,在右侧编辑器补充代码,计算并输出所有正整数对a,b。本关任务:用蛮力法求整数对。100共有以上2个解。测试输入: 100;
2025-03-13 15:12:16
404
原创 第2关:最小连续m个合数
本关任务:对于指定的正整数m(1<=m<=200),在正整数中搜索最小的连续m个合数,输出该区间的起始数与终止数。根据提示,在右侧编辑器补充代码,输出该区间的起始数与终止数。最小的连续50个合数为:19610,19659。最小的连续20个合数为:1130,1149。
2025-03-13 15:09:47
316
原创 牛客周赛 Round 55 题解
题解:使用动态规划来解。f[i][j] 表示在前i个数中以j的数量,g[i][j] 表示在 前i个数中j结尾的数量。
2024-08-12 15:24:37
338
原创 Codeforces Round 950 (Div. 3)
其中x轴的排序时从大到小,y轴的排序是从小到大。如果想移除这个台灯后面积变大,这个台灯必须得位于边界,并且两个相邻的边为边界才行, 这个点也是边界改变的点。所以每次改变边界的时候都把这个点标记。所以用两个map 分别存每个元素的x和 y坐标 然后最后看两个矩阵的每一个元素的x和坐标是不是对应的。思路:从底下往上算,每次都修改最左边的值和最下面的值,并加上左边的面积,就是总面积了。思路:其实就是看两个矩阵的每行和每列的元素是不是一样的。好久没写题解了,今天来写个题解。
2024-06-04 12:04:12
538
原创 牛客周赛 Round 42
使用了组合数的思想。j可以视为第i个数在序列中的位置。除去自身的贡献之外。还有前面j个数和后面j-j-1个数的贡献,并将组合数预处理,字符串的每一个字符的贡献只需要在这次计算就可以了。而在奇数时,我们可以空出最后一个数,因为相比空出中间那个数来说的话,最后一个数,不仅最小值变大了,而且最大值变小了。树上问题熟悉的遍历树。当发现这个子树的联通块大小为偶数时,便可以切除一条边。想要极差尽可能的小,在有偶数个数时,我们可以让首位相乘。
2024-05-20 20:32:06
461
原创 B. Getting Zero
x点到mod的操作数可以视为其最短路。于是可用宽搜从1到mod建图。所以每次求数x到mod的最下操作数变为到mod这个顶点的最小边数。有边权为(x+1)%mod 和(2*x)%mod 两种边权。这题可以使用bfs的做法,特记录在此。
2024-04-23 11:51:51
270
原创 AtCoder Beginner Contest 350
然后再按照排列从小到大的顺序遍历,如果这个数不在相对应的位置上就和其需要到的位置上的数交换。1~6 mp[n/i] / 6 + y 当i=1时 两边有相同的式子,把它移到左边。这题考察联通块的知识,每个联通块内都可以有(cnt)*(cnt-1)/2条边。因为存在一个点被联通块内多个点连接的情况,所以每次先加上边,最后除以2.先用一个数组记录第几个输入的数字,然后一个数组记录这个数字的位置,如果一个洞奇数次进,则总数加一偶数次进总数减一。mp[n]是n的期望花费。
2024-04-21 17:51:16
341
原创 Codeforces Round 877 (Div. 2)
如果是的每一列的差都是m的倍数即可。可先从最大的奇数行到最小的奇数行,在从最大的偶数行到最小的偶数行。每一行内的数差为1,可不更改。只需要保证每一列里相邻的数差为1即可。所以只需要记录每个数的位置,并保持最大的数的位置在1和2的位置之间即可。要求的是最小的排列数,只要让最大的值在1,2之间即可。
2024-04-10 17:35:03
193
原创 Codeforces Round 806 (Div. 4)
这题可以考虑贪心的思想。因为dp的话具有后效性。因为要上限最高,所以尽量让坏钥匙放在后面,因为不会降低上限。所以我们遍历一遍分界点,从第一个到最后一个。其中坏钥匙最多只要计算32个左右,因为数值最大为1e9。实际上就是让四个部分关于中心点对称。所以只要遍历四分之一区块即可,通过推导推出另外三点于这点的关系。遍历一便当这个数小于这个数的下标时,就二分一下求出这个数大于的队列中的下标的数量。并将这个下标放入队列中即可。(队列中放的都是下标)这题数据较小遍历每个字符串暴力求解即可。
2024-03-29 21:03:37
645
原创 Codeforces Round 817 (Div. 4)
所以我们可以将d第n-2 位数设为一个极大的数(2^30) 这样的话可以保证第三十位始终不被占用从而使得第n位不出现过。可以先从第一位到第n-3 为放任意不相等的数,可以为1--n-3. 但前n-3 位的异或和不能等于n-2 位。所以如果前n-3 位的异或和等于n-2 位就放另一个没出现过的数 eg:n-1 .先将未改变之前的总数记录,然后枚举每一位并记录改变后对于总数的贡献,并对这个记录的数组进行排序,将最大贡献的排在前面。这题可以采用二维前缀和的做法。题意位奇数位上的数异或和等于偶数位上的数的异或和。
2024-03-28 00:31:35
377
原创 Codeforces Round 876 (Div. 2)
我们可以先得到4个0 ,再在第二个位置插入0. 所以我们可以从后向前遍历,如果为0 直接输出0,否则计算连续1的数量并输出。在第一个和第n个位置必须要为1,所以可以保证满足条件的最小条件为ceil(n-1/k)+1。这题前提条件是ai要小于等于开启灯泡的数量。又因为文中提到已经开启的灯泡坏掉也算分,所以,每次可以保证ai 的灯泡最多可以开ai个。因为再多就会坏掉,无法再开启。通过分析题目我们可以得出在1的后面必须要有0.否则无法得到1。在根据样例1 : 1 1 0 0 0 来分析。
2024-03-26 17:14:17
255
原创 Codeforces Round 936 (Div. 2)
此题意思为一个n个节点的树,删去k个节点后联通块最小的最大值。所以采用二分答案,二分找到联通块的大小,然后再dfs 找如果联通块大小大于等于这个的数量大于等于k+1的话就满足条件。最后找到最大值即可。先找找到最大子数列,然后每次都增加最大子数列,(记得要更新最大子数列,每次相当于增加了一个自己)。(最后得出的值模数必须要为正,所以先加一个mod。直接进行排序,从后面往前遍历到中位数的位置,在此期间如果有数等于中位数,就将修改次数增加1.再dfs的过程中 :如果联通块的大小大于等于要求就间切断和父节的联系。
2024-03-23 19:24:45
264
原创 Codeforces Round 797 (Div. 3)
本来以为是找一对尽量和可以被k整除的数,后来改为先记录每一个物品除 k 的商,每个数取余数。主要看ai 于bi之间的差和ai 与0之间的差大小,第二种情况不能大于第一种情况。可以理解为多个区段的首尾判断,枚举一次,每次更新下一区段的开始位置即可。可以通过前缀和记录w的数量,来查找k的区间中,w的最小数量。在使用双指针从头尾扫刚好大于等于k的数,更新总和。
2024-03-22 08:55:44
594
原创 Codeforces Round 935 (Div. 3)
先分别求出两种各自再(m+1)的时间里最大可拥有的数量,因为两种的释放时间存在最小公倍数,即可同时开始放,所以可同时满足各自的最大数量。这题模拟即可,使用一个前缀和来计算前后的1的数量,再维护一下 |n/2-i| 最小即可。应为要考虑最大的值和要维护尽量最小的蘑菇数,所以使用一个优先队列,每次排除最小值。在m之前可加上 min(ai,bi) 在m处则计算从1到m的最小情况。先记录出x的位置,模拟一次二分的过程,如果未找到x则交换一下位置即可。只需满足让b的人住满就可以了。其余的则按照最小标准来算。
2024-03-19 21:16:37
730
2
原创 P1004 [NOIP2000 提高组] 方格取数
用一个总步数优化了一维,每个位置只需要保存一个坐标即可,因为总步数相同,所以可以知道这个点的具体坐标。分别枚举两个位置的坐标,状态转移只能从两个位置的上面和左边转移。
2024-03-13 22:00:48
480
原创 Codeforces Round 905 (Div. 3)
思路:要作为唯一的子数组,左端的数必须时第一次出现的位置,否则会被取代,而贡献值由第一次出现的数提供,在最后出现的位置结算一次贡献,每出现一个数贡献加一,且不会消失。思路:如果数量为奇数个的字符要大于k+1的话,则无法形成回文(每次k都可以使一个字符数量变为偶数,当只有一个字符数量为奇数时,可以放在中间)当ai-1 < ai 让 xi 不断减一,直到 ai-1*2<ai.思路:如果最左端的r于最右端的l相交,则全部相交,否则存在不相交。当ai-1>ai xi不断加一,直到 ai>=ai-1.
2024-03-07 13:20:57
423
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅