- 博客(8)
- 收藏
- 关注
原创 Codeforces Round 1014 (Div. 2) 补题
思路:首先特判这个字符串如果只有一种字符,那肯定是没有任何操作空间的。然后通过模拟, 假设此时的字符串是a bbb, 那么第1个a和第1个b之间我是可以一直产生a和c的,最后变成acacabbb, 当这时候我们只有继续插入b,才能继续操作,所有我们可以发现,我们一定是优先让数量最小的字符尽可能的大,当我们数量第二小的字符和数量最多的字符数量一样时,我们就无法再操作了,接着只有插入数量最多的字符才能进行操作,至于这样操作为什么是保证 <= n * 2, 直接猜就完了^-^, 官方给的证明也没看懂.
2025-04-03 14:53:46
738
原创 Codeforces Round 1011 (Div. 2) 补题
思路:要求找到1个k,使得(x + k) + (y + k) == (x + k) ^ (y + k);思路:首先如果a数组和b数组里面的元素都是一样的话,那么我们直接输出1个极大值即可。接着我们要推出一个公式假设 a % k == b,那么可以推出 (a - b) % k == 0,这个是比较容易推的,那么如果要满足条件的话,a数组与b数组对应位置的差的合一定是k的倍数,所以我们先计算出这个合sum, 然后枚举sum的所有因子,也就是枚举k的可能值,然后直接暴力判断即可,代码还是比较好懂的。
2025-03-30 23:33:15
411
原创 HDU2025“钉耙编程”中国大学生算法设计春季联赛(3)补题
思路:个人感觉非常抽象,非常绕的一道题,官方题解给的也是没看懂,盯着代码看了一个下午,稍微理清了一点,就是部落和位置之间的映射关系,详细见代码(纯个人理解,不一定对,欢迎大神指出错误),因为代码很常规就直接贴的官方代码。都是奇数,那就要保证m & n = m,证明如下,然后考虑位运算,要保证 m & n = m, 那么对于二进制n的每一位,如果那一位是1,那么对应m的那一位可以是1也可以是0,如果那一位是0,那么只能是0一种情况。思路:主要考察了Lucas定理,按照题目的要求,必须保证每一项。
2025-03-28 13:20:45
141
原创 Educational Codeforces Round 176 (Rated for Div. 2 补题
思路:分k是否等于1来分类讨论,如果k不等于1,通过模拟可以发现,就是取最大的k + 1个数,如果k等于1,那就取2个元素,而且第二个元素要么是第一个元素,要么是最后一个元素,遍历一遍即可。), 前者是固定的,后者我们用一个后缀和求即可,但是我们要注意如果 y == n 或者 x == n,那我们还要减掉这种情况,所以我们再开个cnt数组记录p位置后面有多少个元素 == n。思路:贪心,开始时分n为奇偶分类讨论,每次减能减的最大值即可。
2025-03-22 21:51:30
471
原创 HDU“钉耙编程”中国大学生算法设计春季联赛(2)补题
然后我们将红宝石看成1元,蓝宝石看成2元,每次操作可以拿 1-3 元,谁无法操作就输掉,这里就比较好想了,必败态就是当前总钱数是4的倍数时,所以如果开局是4的倍数,则先手必败,否则先手必胜。思路:对于这个数列,我们先从后往前遍历一遍,记录每个位置后面有多少个非0不同的整数,然后从前往后遍历,当一个数(p)出现了第2次的时候,假设它出现的位置是j,那么他对答案的贡献就是b[j + 1](它后面不同的整数的个数),并且后续如果这个数再出现,那么它对答案就没有了贡献。题意:给定一个长度为n的数列,问有多少个。
2025-03-21 15:01:57
628
原创 Codeforces Round 1005 (Div. 2) 补题
思路:首先比较好想到的思路是,如果我们要保证数组的分数最大,那么我们删除的连续子数组里一定不能有2个及以上的相同的元素,否则删除后一定会让分数比初始时刻小(初始时刻的分数就是最大分数,后续操作也就是保证数组的分数和初始时刻一样),所以我们一开始要将某个元素出现次数 >= 2的位置标记位false,保证后续不会选到,最后用双指针扫一遍即可,注意 j == n的时候要break,否则会TLE,因为最坏情况是O(n ^ 2);题意:给定一个长度为n的数组,定义这个数组的分数为:数组的长度 - 不同的元素数量;
2025-03-16 23:35:41
856
原创 HDU“钉耙编程”中国大学生算法设计春季联赛(1)补题
当我们有3个人时,第2个人一定会反对第1个人,第3个人一定会支持第1个人,所以第1个人分给第3个人1个金币即可,分给第2个人0个金币,因为第2个人无论如何都会反对;当我们有4个人时,第2个人一定会反对第1个人,而第3个人一定会支持第1个人,因为如果让第2个人开始分配的话,他只能分到0个金币,第4个人也一定会反对第1个人,因为让第2个人开始分配的话,第4个人至少还能得到1个金币,所以第1个人只需要分配给第3个人1个金币,第2个人和第4个人分配0个金币;,问染染不会碰到这k人的概率。
2025-03-11 09:32:20
579
原创 AtCoder Beginner Contest 393 补题
思路:发现直接很难直接对整个数组进行操作,那不妨在1到1e6之间来进行操作,对于每一个数,存入它的所有约数,然后遍历数组,对于数组里的数,记录它们每个约数出现的次数,最后遍历1到1e6,假如一个数出现的次数 >= k 那么就跟新它倍数的ans,时间复杂度为O(N lgN)思路:因为题目上说Ri表示(a1 ... aRi)的子序列,所以可以离线操作,然后dp[i]表示当前i位置的最小值,这边求LIS是比较版的,最后判断目前离线操作的位置i有没有等于Ri,如果等于,就更新答案,此时一定最优。
2025-02-26 14:06:17
239
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人