- 博客(61)
- 收藏
- 关注
原创 【CF】Day28——Codeforces Round 591 (Div. 2, based on Technocup 2020 Elimination Round 1) C
典还是一道很简单的题的,我们可以观察到一个显然的贪心,我们肯定是要把大的数放在收益多的位置,同时题目不需要我们输出位置什么的,所以我们直接将原数组降序排序,然后计算即可我们可以利用二分答案,每次二分选 mid 张票,然后check一下行不行具体看代码。
2025-04-09 13:56:12
46
原创 【CF】Day27——Codeforces Round 589 (Div. 2) CD
数学题题目让我们求的这个东西,我们可以拆成那么对于任意一个质因数 x,在1~n中的奉献是多少呢?首先这个数必须是 x 的 k 次方的倍数,那么最后的奉献一定是这个形式,那么如何算出cnt呢对于每次我们只需要求的大小即可,这代表的就是每次能获得的奉献,比如 3 45。
2025-04-08 08:46:41
212
原创 【CF】Day26——Teza Round 1 (Codeforces Round 1015, Div. 1 + Div. 2) CD
很有意思的模拟题,代码细节需注意因为题目没要求我们最小步骤什么的,同时n也比较小,所以按照题意模拟即可,但是注意细节,比如数的位置,奇偶性,特殊情况等。
2025-04-07 20:46:25
185
原创 【CF】Day25——Codeforces Round 865 (Div. 2) C
找规律手动玩一下我们会发现一个性质,如果有两个位置 i j,且这两个位置奇偶性相同,那么就有可以这样操作 ai+-1 且 aj-+1那我们就可以这样操作,我们将所有奇数位的数全都转移到最后一个奇数位上,所有偶数全部转移到最后一个偶数位上,那么只要最后只要偶数位的和大于奇数位的和就可以构造出来特别的,如果是奇数一定可以构造出来,因为我们只要让第一个无穷小,最后一个无穷大,第二个无穷小 - 1,倒数第二个无穷大 - 1,以此类推即可实现。
2025-04-06 13:37:05
200
原创 【CF】Day24——Codeforces Round 994 (Div. 2) D
典DP的变种如果这一题没有这个变换操作,那么是一个很典型的二维dp,每一个格子我们都选择上面和左边中的最小值即可而这题由于可以变换,那我们就要考虑变换操作,首先一个显然的结论就是我们最多只需要变换m-1次,因为之后的变换其实就回到了开始状态,所以是没必要的这里我们就可以使用一个 dp[i][j][k] ,其定义为 (i,j) 位置在变换 k 次后的最小值。
2025-04-04 20:54:33
334
原创 【CF】Day23——Codeforces Round 766 BD + Codeforces Round 980 CD + Codeforces Round 951 C
似曾相识的题(社恐社牛选座位题目的意思很简单,就是我们可以先让几个位置不让 A 选,然后再让A选,A选完后B可以随便坐,现在问他们两个的距离我们先看简单情况,假设只有一行,那么显然我们只需要让 B 坐 1 或 n 的位置即可,因为 A 的最佳位置就是中间,所以我们坐两边即可,同理,如果只有一列我们也只需要坐两端注意到题目的距离是 x 的差 + y 的差,也就是说二者是独立的,因此 B 的最佳选择肯定是坐四个角落,那 A 的位置呢?
2025-04-03 11:56:58
710
原创 【CF】Day22——Codeforces Round 930 (Div. 2) B + Codeforces Round 973 (Div. 2) CD
还好只有两行这题并不难,因为只有两行,每次只能往下或者往后走,所以我们只需要考虑第一次往下走应该是什么地方,因为往下走之后就只能往右走了显然,如果当前位置在第一行的 i 处,如果第一行的右边是 1,而第二行的 i 处是 0,那么此时一定要往下走所以第一个问题解决了,那么如何知道有几条呢?我们可以直接暴力枚举,从向下的位置开始往前枚举,如果 a[i] = b[i-1],说明此时既可以往右也可以往下,那么答案就加一,当遇到第一个不符合的点就直接跳出循环即可。
2025-04-02 10:52:54
665
原创 【CF】Day21——Codeforces Round 961 (Div. 2) BC
有点思维的模拟题由于题目告诉我们每次选的花要确保任意两种之差都要小于等于 1(开始看错了)也就是说我们只有 只选 x 或 选x和 x+1 这两种选法我们如何选呢?我们可以先只考虑选 x 的花,这样就有两种情况了①.可以全选,即能够只选 x 花用完所有的钱 或 只选 x 花剩下的钱不能再买花了②.不能全选,即选完 x 花后还剩下了很多钱可以用来买 x+1 花这两种情况我们可以合并起来,一个显然的想法,如果我们要增加总价值,那么我们就要买 x+1 花,那买 x+1 花也有两种情况。
2025-04-01 09:58:53
388
原创 【CF】Day20——Codeforces Round 969 (Div. 2) C
贝祖定理,又忘了,很好的思维题这一题可以当一个结论来记忆,结论如下对于一个数 ai 如果我们可以任意次 +a -a +b -b,那么我们最后一定能得到 ai + k * gcd(a,b)证明如下:我们假设当前数为 c 目标值为 d,那么在 x 次 a 操作 和 y 次 b 操作 后,我们得到的结果就是c + xa + by = d,注意其中 x 和 y 是整数那么就是 xa + by = d - c,根据贝祖定理,对于这样的方程,我们有解的条件是 gcd(a,b) | d - c。
2025-03-31 13:13:58
353
原创 【CF】Day18——Codeforces Round 972 (Div. 2) C + Codeforces Round 975 (Div. 2) BC
DP一生之敌对于这种局部最优解并非全局最优解的问题,我们应该想到动态规划,那么根据动态规划五部曲我们来先观察一下(五部曲:方程定义,初始化,方程转移,遍历顺序,举例递推)题目中每个字符串除了当前的能找出来 narek,还有可能找出来多的 nare,也就是说我们还要开一维数组用来存储多了几个字符①.首先我们定义 dp[i][k] 为前 i 个字符串中所能选的最大价值,其中 k 为当前多了几个字符②.那么初始化就是 dp[0][0] = 0,因为没选,除此之外都是-2e9,为什么呢?
2025-03-29 16:33:37
558
原创 【CF】Day17——Codeforces Round 956 (Div. 2) D + Educational Codeforces Round 170 (Rated for Div. 2) CD
见到类似排列的东西我们可以想到逆序对题目给我们两个数组,并且这两个数组中不会有重复的数,也就是说类似两个排列,那我们可以来观察一下题目首先我们可以直接排序一下a和b,如果不相等说明有不同的元素,那么最后肯定不能相同接下来看能否排序呢?我们可以试试这个操作能不能缩减一下成n个小操作,试试发现是完全没问题的,比如我们要交换 1 2 3 4 中 1 和 4 的位置,那我们可以不断交换相邻的两个数实现。
2025-03-28 10:47:09
654
原创 H. YiYi Loves Beautiful Number String
对于 i = 17,其 Sum 值是17 + 1+7 = 25,也就是说如果一个字符串的位数和是 25 ,那么我们可以选择出 1 和 7 放在末尾,然后将剩余数字全放前面,前提是这个字符串中的数必须有 1 和 7,如果没有 1 或 7 我们肯定无法构造出来,这对应着代码中的。(字符串的最大长度),然后对于每一个数 i,我们计算出 i 的位数和 k,那么对于一个字符串 如果其 Sum 值是 i + k 的话,那么说明我们可以在最后构造出一个数 i ,使得其满足题意,而 i 就是一个天然的答案,举个例子。
2025-03-27 11:29:39
309
原创 【CF】Day16——Codeforces Round 956 (Div. 2) and ByteRace 2024 C + 拓扑排序 + 树上贪心二分
暴力,太暴力了简化一下题意,就是让我们在a,b,c三个数组中选3段无重复的连续区间,使得每段区间和都是sum/3,其中sum是每个数组的和,并且保证每个数组和相同既然要选区间,那么最后肯定是如下图所示的选法即一段左边,一段中间,一段右边但是谁中间谁左边谁右边呢?无所谓,暴力枚举会拯救一切,我们直接排列组合一下即可,发现最多就6种情况,所以我们可以枚举那么如何选区间呢?
2025-03-27 11:29:07
342
原创 【CF】Day15——Codeforces Round 1012 (Div. 2) CD
欸,我们可以发现,如果我们把排列分成 3 等份,那么我只要在中间这等分里找到一个素数 p,那么肯定能在左右两边都拿出两个数来组成素数 p 的两倍,比如如果我们选7,那么我们就可以选6 8构成 7 6 8,这样就有两个素数了,也就是说我们可以将两个数变成一个素数。比如最后一个样例是 2 1 3 4 5,那么如果我们后面要构造的话肯定只能构造5了,因为就算我们选的数是6,我们最小只能获得4,这显然不利于我们构造,所以我们就应该看看能不能构造出5来,显然是可以的,但是前提是我们能取到,但是方法我感觉有点复杂了。
2025-03-25 16:58:20
258
原创 Codeforces Round 1011 (Div. 2) CD
切勿复杂化,这只是个C!首先我们要知道一个性质,即 a + b = a ^ b + 2 * (a & b)观察题目,即 x+k = a,y+k = b,a & b = 0那问题就转化为了 (x+k) & (y+k) = 0,即使得x+k后和y+k后的二进制位没有任何一位同时为1,那我们一个显然容易想到的做法是遍历每一位,如果此时相等,那么就从此位往后找,一直找到第一个两者二进制位不相同的地方,然后加上2的i次方但是显然,这种做法有点复杂,如果有多位连续1呢,如果后面没有呢相同位呢?
2025-03-23 22:39:26
767
1
原创 【CF】Day14——Codeforces Round(Div2) 924 BC + 926 C + 934 C + 922 C
如果题目没有要求r的话,我们肯定是改变比较好的,但是现在有了限制,那我们就要考虑一下了,假设改变了第一个不相等的地方,那么肯定是不够好的,因为改变之后首先我们的r就减少了很多,这不利于我们后续的进行,所以贪心的想我们这一位不如不取,并且如果这一位不取的话,后面的所有位我们都可以取(前提是这位是可以取但是不取的情况)假如我们有一个神秘的盒子,我们可以往里面投任意数量的金币,每次有50%的几率消失,有50%的几率翻倍还给你,问你如何获得无限的钱,每次的几率是一样的,你只能投小于等于你当前持有钱数的钱。
2025-03-23 17:47:48
848
原创 牛客小白月赛112 D.智乃的“K”叉树
很有意思的题,想复杂了我们先简化一下题目,假如是无向图该怎么办呢?我们可以看到,k 的最大值肯定就是 度 最大的节点那么加上根会发生什么呢?以上图举例,假如1为根,那么1的子孩子就是1个,3是两个,2和4都是0个,同理我们换几个节点看看,可以发现一个规律:我们选的根的子孩子数等于其度数,而其他的子孩子树都是度数减一那么我们如何去找最小 k 呢?
2025-03-22 00:35:18
205
原创 【CF】Day13——Codeforces Round 899 (Div. 2) BCD + Codeforces Round 889 (Div. 2) BC1C2
注意数据范围,注意数据范围,注意数据范围!题目给的数据非常非常小,所以我们直接暴力枚举都没问题,那么如何枚举呢?我们可以先求出所有集合的并集T,然后以此枚举T中的元素,如果要是S!= T,那么必定有一个元素s不能选,我们只需要枚举T的每个元素s,然后枚举所有的S,看看其中是否含有s,如果有,那肯定不能选,否则就选。
2025-03-21 23:57:04
803
原创 位运算异或 + 构造 D. Ehab the Xorcist
那么就能先排除一些不可能的情况了,分别是 u > v 时 u % 2!= v % 2那再看特殊情况,u == v 时,此时最短就是 u 就行了那再看一般情况,可以发现,我们最多只需要3个元素就能组成其元素为 u ,x ,x,其中x为 (v - u) / 2显然这是没问题的,那我们在考虑是否能更小一点呢?显然是可以的,观察性质3,假如 u & x == 0的话,那么此时 u ^ x 就等于 u + x 了代码如下。
2025-03-21 16:30:06
161
原创 【CF】Day12——Codeforces Round 910 (Div. 2) BCD + Codeforces Round 911 (Div. 2) CD
想到了,但是代码细节没处理好既然我们要将数组变成升序,并且要求最小值,那么肯定要贪心一点我们可以从后开始枚举每一个数,同时定义一个mx代表数组的最大值,如果当数小于mx,说明符合,就不需要更改,同时将mx变为这个数,反之肯定要将这个数进行操作了,同时将mx变为操作后的数思路是这样,那么如何实现呢?首先我们要分解的话肯定是尽量分成较大的数,比如5分成2和3,8分成4和4,那么如何分呢?我们可以利用mx,首先肯定是要分解成小于或等于mx的数,假设要分成k份。
2025-03-20 12:13:20
667
原创 【CF】Day11——Codeforces Round 915 (Div. 2) CD
思维题,顺便考了下细节首先我们题目让我们对这个字符串排序,那么显然只能按它的规矩老实去做,但是直接模拟的话肯定死翘翘,那我们就来观察一下有什么性质首先题目让我们找到字典序最大的字串来操作,那么最大的字串从什么地方开始?肯定是从第一个出现最大字符的地方开始,然后往后每次都选较大的。
2025-03-19 09:50:38
768
原创 牛客周赛 Round 85 DEF
一个考思维的题首先,根据题目描述,我们要找到一个双生串,那么如果出现1,1就是要偶数个,同理0也一样,但是要注意,0和1起码要有一个,因为空串不算那我们如何来找呢?这里我们可以像“寻找区间内满足区间和为k的个数”的做法,我们可以用前缀和来做,用sum代表前缀和,用一个map来储存区间和,那么对于sum,只要map[sum - k]存在,就说明可以从前面的某个地方开始到当前的和满足等于k那么对于这道题,我们如何寻找呢?
2025-03-18 08:36:43
748
原创 【CF】Day9——Codeforces Round 953 (Div. 2) BCD
被标签害了,用什么二分(很简单的思维题,首先如果a >= b,那么全选a就行了,还搞啥活动否则就选 b - a 天来搞活动,为什么?首先如果我们要搞活动,而且要最大利益,那么肯定要满足 b - k >= a,即每一天的利润都不能小于a,不然的话我搞啥活动所以变换一下就是 b - a >= k,可知最大k是 b - a ,然后再写出理论公式即可(自己写X)
2025-03-17 22:48:47
846
原创 数学——A. K-divisible Sum + D. Exam in MAC
以下 “[xxx]” 符号均代表向上取整我们假设总和是sum,那么就有sum = k * cnt要想最大值最小,肯定是要让sum尽可能小,这样每个元素都能变小最小情况是 sum 恰好等于 n 时,此时有 n <= k * cnt则 cnt 满足 cnt >= [n / k],当其取最小值时,sum有最小此时既然我们知道sum的最小值了,那我们来探讨一下数组中最大值的最小值应该是多少显然最小值应该是 [sum / n],所以我们便可写出代码了。
2025-03-16 15:20:42
704
原创 【CF】Day8——Codeforces Round 917 (Div. 2)BC + Codeforces Round 932 (Div. 2) BC
思维题如果我们要删除的话,只能删除第一个和第二个,那我们来分析一下操作后会发生什么如果删除的是第一个,那么就是字符串的首字母换成第下一个了如果删除的是第二个,那么就是首字母后的字符串发生了改变我们可以假定首字母为c,那么以c为首字母的奉献就是n - pos[c],其中pos[c]为字符c在字符串中的位置那么我们只需要储存每个字符在字符串中的位置即可特别的,如果字符串中有个字符有多个位置,我们只需储存最前的位置即可,因为对于同一个首字母,位置前的所有字串肯定包括位置后的所有子串。
2025-03-16 11:14:25
861
原创 【CF】Day7——Codeforces Round 919 (Div. 2) BC
千万别想的太难了,想难你就输了鲍勃想最小化数组的话肯定是把x个最大的全乘以-1,爱丽丝想最大化就要删去k个最大值,但是不一定要删k个观察数据,n是2e5,那么我们暴力枚举删后i个元素然后取最大值即可,同时要注意先排序。
2025-03-15 16:42:16
284
原创 【CF】Day6——Codeforces Round 942 (Div. 2) BC + Codeforces Round 941 (Div. 2) C
其中add为每个元素是否多,如果多就加1,表示为(
2025-03-14 18:54:38
924
原创 【CF】Day5——Codeforces Round 921 (Div. 2) BC
这道题要我们分成n个子问题,我们假设这几个子问题分别是a1,a2,a3,...an,那么就是让我们求 gcd(a1,a2,a3,....,an),我们假设这个值是d那么就有 d | a1,d | a2,d | a3 .... d | an即 d | (a1 + a2 + a3 + ... + an)所以我们只需要求一个d,使得其是x的因数即可,然后再判断能不能拆成n个因为我们一定可以拆成d + d + d + ... + x - (n-1) * d的形式,其中显然gcd就是d。
2025-03-13 18:59:45
407
原创 【CF】Day4——Codeforces Round 1009 (Div. 3) C + Codeforces Round 1008 (Div. 2) D
补一下,忘写了(
2025-03-13 18:13:06
985
原创 牛客周赛 Round 84——小红的陡峭值(四)
我们这里选取节点1为根节点,那么接下来的每个节点的父节点都是唯一且确定的,我们这里可以定义一个arr[i],表示以i为根节点的陡峭值之和,其实这个有点像前缀和,但是是在树上的。显而易见,就是arr[1] - arr[v],同时注意一点,由于删除了uv,所以这条边的奉献也要删除,最终我们可以获得以下式子。题目告诉我们关于树的陡峭值的定义,那一开始看起来无从下手,但是当我们选取某一个节点为根节点时,这个题目便看起来好做多了。假设我们要删除uv这条边,那么下树的值很好看出,不就是arr[v]吗,那上树呢?
2025-03-10 22:19:54
372
原创 【CF】D. Fill The Bag 二进制
那么对于任意一个数我们将其转化为二进制形式,如果该处是0,说明不需要考虑,否则说明只需要一个2的x次幂即可,所以我们用一个map来存储到底有多少个2的x次幂,这里我们可以直接存log(a[i]),因为到时候我们可以使用位运算来判断该位是0还是1,那对于第i位,我们只需要2的i次幂即可,即从map中寻找是否有i。接下来我们想,题目所给的条件是每个 a[i] 都是 2 的x次幂,然后我们又要将 a[i] 拼成一个数,那我们就可以考虑使用二进制。,那么拆分的次数就是b-a了,同时我们发现,每次拆解都多了一个。
2025-03-09 14:45:48
363
原创 【CF】Day1
那我们再看题目,由于x²一定要小于10,那么x只能取0,1,2,3,可以发现0,1对数是没有影响的,那么接下来直接考虑2,3即可,我们如果对3进行平方操作,那么对数位增加3*3-3=6,同理可以计算出2的奉献为2,那么接下来我们只需要枚举3和2是否要平方操作了。我们可以直接暴力枚举,如果增加的奉献最后对9取模刚好等于原数对9取模的值,说明肯定可以实现,因为同余有加减操作,所以直接取模是没问题的。3. 通过一系列相邻的加减操作,将多余的值从大于A的元素转移到小于A的元素。1. 找到第一个不等于A的元素。
2025-03-08 00:03:27
367
原创 【CF】C. Tokitsukaze and Two Colorful Tapes+C. Where is the Pizza?
进一步观察发现(其实是打表),我们可以知道,对于任意一个长度大于一的环,无论如何都只能有两种选法,同时如果这个环只要有一个被锁定了,那么就只能有一种选法所以这道题我们只需要寻找环,如果这个环没有被锁定,且长度大于1,那么就将结果乘2。
2025-03-06 21:30:01
877
原创 Good Bye 2024: 2025 is NEAR (ABC题)
再发现,由于这是一个1~n的递增数列,那我们可以观察到1+n = 2+n-1 = 3+n-2 = .... = mid。探究一个区间 L~R 其中的每个数出现的次数,如果对于每个数X都出现过两次及以上,那么肯定不行,否则必定能只出现一次。一直到n < k为止,同时,由于每次左右都是对称的,所以我们就不需要考虑另一边了,每次直接将n/2即可。因此,我们可以每次都分割n,如果n是奇数,那我们就要加上一次mid,否则我们就不加。对于这个,我们可以用前缀和的思想,首先我们预处理L==R的情况,并且记录。
2025-03-06 11:06:18
908
原创 【CF记录】贪心——A. Scrambled Scrabble
由于Y有两种选择,NG也是,那我们可以枚举以下情况:选i个Y做辅音,j个NG做辅音。然后贪心选择最长的即可,观察到S最长为5000,即使是。
2025-03-05 23:40:26
177
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人