- 博客(43)
- 收藏
- 关注
原创 Codeforces 更换
我们先统计原字符串中0和1的个数,如果在原字符串中,0和1其中任意一个个数为0,那么就不能完成替换,直接输出No。随后遍历数组,每次执行替换前先进行判断剩下的字符串中0和1的个数是否为0,只要有一个为0,那么就不能完成n-1次替换,输出no。这道题要求每次合并的两个字母不能相同,那么就是每次合并一个1一个0。替换时要根据要替换的字符来对原字符串的0和1个数进行加减,如果顶替上的字符是1,那么原字符串的0个数就要减一,如果是0,那么原字符串的1个数减一,如果可以执行n-1次,那么就算成功,输出yes。
2025-08-22 19:37:52
302
原创 Codeforces 一场真正的战斗
当首尾有一个1时,Alice 可以优先在靠近1的位置放置or运算符。由于or运算的特性(1orx=1),只要最终表达式中保留这个1并通过or 连接,结果就会是1。有两个相邻的1时,两个相邻的1无论中间放and还是or,结果都是1(1and1=1,1or1=1)。Alice 可以在这两个1之间放置运算符,后续无论 Bob 如何操作,都无法将其变为0,最终结果必然为1。这道题只需要保证首尾中有一个1或者在字符串中有两个相邻的1,Alice就可以赢。
2025-08-22 17:20:21
275
原创 Codeforces 更难的问题
最后判断,当要输出的数组元素有些位置是没有元素的,就将上一部填充数组的元素存入当前下标中,并在填充数组中踢出。遍历过一次后再遍历一次,这次是为了寻找没被使用过的数组用来填充后续要输出的数组。当这个元素没出现过,那么就将这个元素存入新数组中。先定义一个数组用来判断之前是否出现过这个元素,如果没出现过,就将这个数字标记一下并将这个元素存入另一个数组,用来输出最后元素。这道题我们可以用最简单的方法,因为题目上写,每个元素都是大于等于1小于等于n,那么我们只需要保证整个数组没有重复的数字即可。
2025-08-22 10:57:57
208
原创 Codeforces 输血
首先计算奇数的个数并把每个奇数下标元素加在一起,偶数同理,随后判断所有元素加一起能否被奇数个数除尽,这是为了保证奇数索引元素可调整为相同整数。最后判断偶数元素总和除以偶数下标个数不等于奇数元素总和除以奇数下标个数,因为题目说要保证数组所有元素相同。这道题目其实不用一个个判断,因为我们遍历之后就能发现,所有数字都会增加或者减少,全部判断就可以了。根据题目我们可以发现,每次判断的两个数下标性质都是相同的,要么是偶数要么是奇数,我们直接按照奇数偶数判断即可。
2025-08-21 20:03:27
275
原创 Codeforces 机器人程序
第二次遍历数组时,当机器人到达0点,我们就可以直接计算剩余的k中有几个可以到达0点的地方,因为只要机器人到达0点,整个字符串就要重新遍历,而在后续的遍历中每次位置都是从0开始到,那么只需要寻找k中有几个可以到0点字符串长度即可。这个题目只需要找规律就好,先遍历一边字符串,当整个字符串长度都遍历完还是没有到0点直接输出0,如果在遍历一遍字符串中到达0点,那么继续遍历数组。
2025-08-21 18:49:19
284
原创 Codeforces 完美
这道题首先判断一下给出的n所构成的数列所有元素加起来是否为某个数的完全平方,如果是直接输出-1不用继续判断,随后我们先定义一个数组,按照1-n的顺序先存进去,这样我们后续的代码与思路可以简单很多。存完后我们开始遍历数组,因为我们是按顺序填的,所以每个元素前所有数组加起来都是它的前n项和,按照公式计算前n项和,如果是完全平方数,那么就将当前元素与它后面的元素互换一下位置,就可以避免完全平方的出现,最后遍历完整个数组直接输出修正过元素位置的数组即可。
2025-08-21 11:51:59
324
原创 Codeforces 美妙的手套
那么我们可以根据给出的数组,先比较每对左手套右手套的大小,先加上最大的那一个,举个例子,颜色1左手套25个右手套98个,颜色2左手套56个右手套12个,假如拿了25个手套和12个手套,题目说在拿出来前是不知道这是右手套还是左手套,也不知道颜色,拿了这37个手套,有可能全部拿成了颜色1的右手套,也有可能全部拿成了颜色2的左手套,不能百分之百确定拿到了不同的手套不同的颜色;但是如果我们拿了98个手套和56个手套,即使这98个全部拿成了颜色1的右手套和颜色2的左手套,但是下面再拿的手套一定是不一样的。
2025-08-21 10:46:43
230
原创 Codeforces MIN = GCD
首先找到数组中的最小值及其位置,然后排除最小值本身,只考虑能被最小值整除的元素并计算这些元素的最大公约数。如果计算出的最大公约数等于最小值,输出Yes,否则输出No。因为任何序列中,最大公约数总是小于或等于最小值。这道题的核心只要判断一下除了最小值外其他元素的最大公约数是否和最小值相等即可。
2025-08-20 20:04:56
129
原创 Codeforces 斐波那契立方体
以上只需判断这两个,因为每个方块的边长都要比上一个方块小,那么剩余的空隙是绝对支持放下其他方块的,就像是一根木棍每次只取1/2,是绝对取不完的,同理,小方块的位置也是绝对够放的,所以只需要判断这两个条件,都满足那么就证明这个盒子可以放入所有的方块,字符串+1.判断1:输入盒子的长宽高后排序,然后将最短的那条边和最大的方块边长比较,如果最短边小于最大的方块,那么肯定不能塞进去,字符串+0。这道题其实不用深究,题目上说每个方块大小都遵循斐波那契数列,那么我们只需要做两个判断是否能塞入题目所给的盒子。
2025-08-19 20:04:16
207
原创 Codeforces 盒装苹果
这道题其实只需要判断两个要点,首先判断一下最大值-1后与最小值的差值是否>k,这里有个小细节,当有多个最大值时,可以先将一个最大值-1后再排序,判断新数组最大值与最小值的差值。如果>k,那么杰瑞赢,如果<k那么继续下面的判断。根据示例可以看出,不管k有多大,只需要判断所有元素的和的奇偶性就可以直接判断,当元素和为偶数,那么杰瑞赢,反之汤姆赢。
2025-08-19 19:35:20
222
原创 Codeforces 二进制打字机
至于如何计算,题目要求在子字符串反转一次的前提下,计算最少的,那么我们就直接判断需要反转几次,先在原字符串前添加一个0,方便后续判断。定义一个变量ans,先后判断两个字符,如果字符不相等那么ans就加一,遍历完一整个字符串后再判断ans的大小,如果ans>=3,那么我们最多只能将两个字符串合并减少两次的换键成本,如果ans=2,那么反转后只需要增加一次换键成本,如果ans=1,不管怎么转换都需要增加一次成本,那么直接将这种情况和ans=0时放在一起,输出即可。
2025-08-19 19:25:16
207
原创 Codeforces 收缩阵列
至于为什么不会有超过1的数字,题目中写到最少操作次数,我们发现一串数字,除了单调递增和单调递减那么就必然会有三个元素按照大小大或者小大小排序,那么根据题意,只需要将最中间的数字和旁边其中一个数字删除,替换成和剩下的数字大小相等或者差1的数字即可,此时就满足了题目所说的美观数组。当数组是单调递增或者单调递减且紧挨的元素相差大于1,那么就不存在可以满足题目都两个元素,输出-1。当数组中有相等或绝对值差1的两个紧挨着的元素,直接输出0就好。这道题输出有且只有三种,1,0,-1。
2025-08-19 10:04:37
200
原创 Codeforces I Will Definitely Make It
随后进行判断,定义两个变量q,p,两个变量要相差1,因为我们不能确保从当前下标一下子就可以跳到最大的元素,所以一个一个的移动,可以避免很多不必要或者没注意到的错误。当两个下标的差值大于b数组最小的元素,也就是题目中所说的x。大于x时也就意味着跳到下一个元素所需时间更长,此时就会被水淹没,那么直接输出no就可以。如果最后跳到了最大的元素,输出yes,这一个样例就算结束。首先再开一个数组b,将a数组排序后从索引k(排序前)代表的数组开始寻找比索引k大的元素,存入,并且保证b数组中没有重复的元素。
2025-08-18 18:06:39
293
原创 Codeforces Deque工艺
当k为奇数时,同样判断左右端点大小,这次不同的是如果左端点更小输出L,这是为了保证不能连续增加或者连续减少,即使题目要求是连续5个递增或递减才是坏数组,比起计算有几个连续递增或者递减,还是直接一大一小来的方便,最多只有2个是连续的。r代表右端点的下标,l则是左端点的下标,k是计算有多少个元素被选中,方便结束循环与判断什么时候输出大的什么时候输出小的。当k为偶数时,判断左端点右端点的大小,如果左端点更大就输出L,否则输出R,输出哪个端点的大写字母,那此时的小写字母就要变化,左端点就+1,右端点就-1。
2025-08-15 19:57:29
347
原创 Codeforces 无路可走
(1)当数组所有元素加起来只比s小1时,再回去看题目可以发现,数组中至少有1个0,1个1,1个2,我们只需要保证最后两个数字排列不是1和0即可,那么就采取最朴素的方式直接按顺序,先全部输出0,再全部输出2,最后全部输出。(2)当数组所有元素加起来比s至少小2时,那么这个时候,不管是怎么排列都无法阻止爱丽丝,由于题目中要求至少包含一个0,那么爱丽丝就可以采取0和旁边不为0的数字进行增加,直到凑够所有元素比s小的数值,再走到下标为n的数组即为完成。1 当数组所有元素加起来大于s时。这个时候又分为两个情况。
2025-08-15 17:33:36
307
原创 归并排序(简单讲解)
这里我将排序与合并写在了一起,先存入左端点与右端点,方便后续将数据存入新数组,随后在循环中将此时要判断数据放入新数组中,最后将还没有存完的数组一起放在新数组的尾端,最后将新数组中的数据覆盖原数组。排序有许多种方法,其中最为简单的sort排序与冒泡排序,但是在一些需要排序的题目中这两个方法就不好用了。分开时要用到二分的思想,当左端点小于右端点时进行分割,直到将整个数组分成单个数字存在,随后进行排序与合并。需要依次将一个数组分成单个后,比较大小,再次合并成为一个新的且排好顺序的数组。那么我们要攻克的难点为。
2025-08-02 16:13:53
240
原创 P1019 [NOIP 2000 提高组] 单词接龙
单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的“龙”(每个单词都最多在“龙”中出现两次),在两个单词相连时,其重合部分合为一部分,例如。查询字符串时,我们可以使用substr函数进行剪切,如果符合要求那就返回剪切后的字符串,如果找不到符合要求的就返回“0”,在dfs函数中也要记得判断一下更新后的字符串是否为“0”,如果不为0才可以继续进行dfs。,另外相邻的两部分不能存在包含关系,例如。只需输出以此字母开头的最长的“龙”的长度。
2025-07-26 20:05:56
397
原创 洛谷 P5788 【模板】单调栈
如果不为空,那么就将此时栈中最顶端的下标存入所求新数组中。,即 f(i)=mini<j≤n,aj>ai{j}。定义函数 f(i) 代表数列中第 i 个元素之后第一个大于 ai 的元素的。这道题是单调栈的模板题,在这道题之后我也写过其他单调栈的题目,基本无差。首先定义一个栈,将原数组逆序判断,因为我们要比较i位置后面的数据。当栈不为空且栈最顶端数据小于数组当前的数据时,将此时栈的数据踢出。对于 100% 的数据,1≤n≤3×106,1≤ai≤109。一行 n 个整数表示 f(1),f(2),…
2025-07-07 19:49:37
253
原创 洛谷P8651 日期问题 题解
小明知道这些日期都在 1960 年 1 月 1 日至 2059 年 12 月 31 日。令小明头疼的是,这些日期采用的格式非常不统一,有采用。,可能是 2002 年 03 月 04 日、2004 年 02 月 03 日或 2004 年 03 月 02 日。由题目可知,给出的三个数字分别有三种不同的组合方式,在根据题意匹配时还需注意是否合法,以及题目要求的年份。更加麻烦的是,年份也都省略了前两位,使得文献上的一个日期,存在很多可能的日期与其对应。输出若干个不相同的日期,每个日期一行,格式是。
2025-05-14 14:08:47
222
原创 洛谷P3849 进制转换 题解
根据题意可以得出需要转换成R进制,那么就用进制转换的方法计算,存入数组,最后输出相应的R进制表示出来。小美刚刚学习了十六进制,她觉得很有趣,想到是不是还有更大的进制呢?输入两行,第一行包含一个正整数 N,第二行包含一个正整数 R,保证 1≤N≤106。所以,你需要帮助她写一个程序,完成十进制转 R 进制(2≤R≤36)的工作。表示35,岂不是可以表示36 进制数了嘛!输出一行,为 N 的 R 进制表示。
2025-05-14 12:36:23
199
原创 降温(easy)题解
来源:牛客网天气开始降温了。如果某一天的温度比前一天降低的值不小于xxx,小红就会认为这是一场“寒潮”。现在给定了每天的气温,但有一些日子的气温是未知的。小红想知道,发生寒潮的次数的最大值和最小值是多少?注:我们认为,每天气温的值域一定在[-50,50]。
2025-05-07 12:53:54
275
原创 小红的小球染色 题解
来源:牛客网有 nnn 个白色小球排成一排。小红每次将选择两个相邻的白色小球,将它们染成红色。小红将持续这个操作直到无法操作,请你计算小红操作次数可能的最小值和最大值。
2025-05-07 12:33:42
454
原创 2024 CCPC 全国邀请赛 M有效算法
重要的是check函数的书写,再回看题目,将题目给出的条件里的绝对值去掉可以得到两个判断条件,一个是答案的左边界一个是右边界。在循环中,如果左边界大于右边界则不符合条件返回false,如果整个循环都满足左边界小于右边界的情况那就返回true。最后直接输出查找的答案就可以了。根据题目可知,我们所要查找的答案在一个区间中,很容易就想到二分答案了。题目要求输出最小满足的数据,那么就使用左模板。
2025-05-02 17:32:53
215
原创 K - Magic Tree 题解
星光闪烁有一个 2 行, m 列的网格,行 i 和列 j 被标记为 (i,j)。她从标记为 (1,1) 的格子开始执行深度优先搜索(即第一行和第一列),每个格子可以到达至少有一个边相邻的格子。由于搜索过程不会重复访问格子,因此可以使用树来描述搜索过程。现在她想知道标记树的所有可能结果总共有多少,并且为了避免答案过大,你需要对 998244353 取模后打印出来。正式来说,我们使用一个栈 S 来描述深度优先搜索过程,并使用边集 EE 来表示一个标记树。
2025-04-30 17:28:50
303
原创 Multiples of 5 题解
给定一个非负的长度小于 1014 的基数-11 整数,判断它是否是 5 的倍数。由于输入规模较大,输入以 nn 对的形式给出,其中每个对 (ai,bi) 代表 ai 个连续的数字都是 bi。按顺序连接所有对得到输入数字。这里我们使用数字 0,1,2,……,9 和字母 A 来表示基数-11 的数制。例如,输入 (1,1),(4,5),(1,4) 表示数字 (155554)11。具体来说,十进制数 110 对应输入 (1,A),(1,0)。
2025-04-30 17:14:30
322
原创 J - Magic Mahjong 题解
根据题意,当字符串中含有1p,1s,1m,9p,9s,9m,1z,2z,3z,4z,5z,6z,7z所有长度为2的字符串且还有一个长度为2的字符串属于上面13个中任意一个就输出Thirteen Orphans;定义一个数组,遇到1p,1s,1m,9p,9s,9m,1z,2z,3z,4z,5z,6z,7z这些不同的字符串分别在对应的数组+1,计算数量。当大小为1时b++,当大小为2时a++。遍历后对字符串的数据进行判断,当每个字符串数据都是2那么输出7 Pairs,如果有一个不等于2输出Otherwise。
2025-04-30 12:30:59
408
原创 团体程序设计天梯赛-练习集 L1-103 整数的持续性 题解
从任一给定的正整数 n 出发,将其每一位数字相乘,记得到的乘积为 n1。以此类推,令 ni+1 为 ni 的各位数字的乘积,直到最后得到一个个位数 nm,则 m 就称为 n 的。例如 679 的持续性就是 5,因为我们从 679 开始,得到 6×7×9=378,随后得到 3×7×8=168、1×6×8=48、4×8=32,最后得到 3×2=6,一共用了 5 步。本题就请你编写程序,找出任一给定区间内持续性最长的整数。
2025-04-23 17:29:19
294
原创 洛谷P1028 数的计算 题解
本题数据来源是 NOIP 2001 普及组第一题,但是原题的题面描述和数据不符,故对题面进行了修改,使之符合数据。两个合法数列 a,b不同当且仅当两数列长度不同或存在一个正整数 i≤∣a∣,使得 ai≠bi。当需要判断的数字是偶数时满足的序列个数是此时偶数/2时满足的序列数加上上一个数的序列数。记得要初始化当给定数字是0或者1时满足的序列数,方便特判也方便循环时的运算。我们要求找出具有下列性质数的个数(包含输入的正整数 n)。当需要判断的数字是奇数时满足的序列和上一个数的序列数相同。
2025-04-23 17:12:38
229
原创 洛谷P8783 统计子矩阵 题解
那么我们就先将整个矩阵所有的数据依次加起来,计算大矩阵的大小。如果数据小于K那么上边界和左边界不动,另外两个边界移动,如果子矩阵数据大小超过了K那就改变上边界和左边界继续判断子矩阵的数据大小。给定一个 N×M的矩阵 A,请你统计有多少个子矩阵 (最小 1×1, 最大 N×M)满足子矩阵中所有数的和不超过给定的整数 K。对于 100% 的数据, 1≤N,M≤500,0≤Aij≤1000,1≤K≤2.5×108.在给出的大矩阵中要求计算每一个小矩阵所有数据之和小于等于给定的数K。大小为 1×1 的有 10个。
2025-04-16 13:47:44
277
原创 洛谷P1449 后缀表达式 题解
所谓后缀表达式是指这样的一个表达式:式中不再引用括号,运算符号放在两个运算对象之后,所有计算按运算符号出现的顺序,严格地由左而右新进行(不用考虑运算符的优先级)。先将数据依次存入哈希表中,当遇到计算符号时,我们就要用到最后一个存的数,和倒数第二个存的数,用给出的计算符号计算相应答案,将答案取代存入哈西表的倒数第二个数值。数据保证,1≤∣s∣≤50,答案和计算过程中的每一个值的绝对值不超过 109。请出我们的老朋友——哈西表,哈哈是的没错我们还要用到它。输出一个整数,表示表达式的值。为表达式的结束符号。
2025-04-02 20:13:46
416
1
原创 洛谷P2367 语文成绩 题解
接下来我们开始分析题目,其实这是一道十分基础的差分问题,在给出的区间左边界加上要增加的数据。但是我们要增加的是一个区间,所以要在右边界后面的数据减去增加的数据防止多加。这两个算法一般都会运用数组,不同的是,输入一个数组,前缀和是当前数组加上前面所有的数字之和;接下来 p 行,每行有三个数,x,y,z,代表给第 x 个到第 y 个学生每人增加 z 分。对于 100% 的数据,有 n≤5×106,p≤n,学生初始成绩 ≤100,z≤100。第一行有两个整数 n,p,代表学生数与增加分数的次数。
2025-04-02 18:26:19
418
原创 素数个数 洛谷 - P3912题解
(质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数)(质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数)判断完是否大于n后,将内层循环的素数*外层循环的i值作为下标存入bool数组中,并将此时的下标值修改为1,即此时这个数是素数,方便后续存素数。接着进入循环,当下标为i时bool数组值为0那么说明i是素数,存入素数数组中,素数下标+1。最后,假如外层循环的i值对内层循环的某一个素数求余值为0时,循环终止,为了防止多次判断同一个数值,增加时间复杂度,导致时间超限。
2025-03-26 17:44:03
376
原创 Game of Mathletes 题解
Alice 和 Bob 正在玩一个游戏。黑板上写着 n (n 是偶数) 个整数,用 x1,x2,…,xn表示。还有一个给定的整数 k和一个初始值为 0 的整数 score。Alice 的目标是最小化 score,而 Bob 的目标是最大化 score。假设两位玩家都采用最优策略,游戏结束后 score 的值是多少?
2025-03-26 17:11:54
1378
原创 洛谷P2440 木材加工 题解
题目上说,要求每一个木头切割成等长的小段,即输入的n个木头中每个都要被分成长为x的小段。这个题是一道很典型的二分答案,由题目给出的示例加以计算可知,这道题正确答案是在可以满足条件范围内的右边界,所以要使用右边界的模板。对于 100% 的数据,有 1≤n≤105,1≤k≤108,1≤Li≤108(i∈[1,n])。木头长度的单位是 cm,原木的长度都是正整数,我们要求切割得到的小段木头的长度也是正整数。第一行是两个正整数 n,k,分别表示原木的数量,需要得到的小段的数量。下面就是完整代码啦~
2025-03-23 19:49:05
355
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅