自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(109)
  • 收藏
  • 关注

原创 CF1916D Mathematical Problem

先打了个暴力程序,发现平方数太多,没什么规律,就拿了个 map 统计一下那些出现数字方案拥有的平方数比较多。之间插入相同数量的零,再在后面放若干个零构成的,首先因为插入的零是偶数,并且总数字个数是奇数,再加上有。先试一试五位数的情况,发现下面的数字组合都可以存在五个以上的平方数,除了样例给的还有一组。之间插入相同数量的零,再在后面放若干个零构成的数也一定是平方数,也是正确的。三个数字,所以后面的零一定是偶数个,所以后面加的一定正确,只需要验证。再试一试七位数的情况,发现符合条件的数字组合更多了。

2023-12-31 13:22:03 1242

原创 CF1916C Training Before the Olympiad

想使答案大的人先操作,如果此时,奇数的数量在两个及以上,就会选择两个奇数,否则如果偶数的数量在两个及以上,则选择两个偶数,否则选择一奇一偶。首先,我们可以考虑两个人会怎么操作,如果是选择了两个偶数和两个奇数,那么答案不会减小,如果选择了一个奇数一个偶数,那么答案会减小一。但这还不是最优的,想使答案大的人在可以选择两个奇数时,绝对不会选择两个偶数,因为这样可以让想使答案小的人可以选择的奇数变少。,代表要么想使答案大的人选择一次一奇一偶,要么想使答案小的人选择一次一奇一偶,所以答案必定还会少一,如果余数为。

2023-12-31 13:20:54 516 1

原创 CF1916B Two Divisors

所以如果最小公倍数不是答案,就没有答案了,而题目又保证了存在答案,所以这种情况最小公倍数就是答案。同样的,如果这个答案不合法,就不可能存在其他答案合法,题目又保证一定存在答案,所以这个答案正确。的倍数,所以想到最小公倍数,如果不考虑最小公倍数等于。,最小公倍数就一定是答案,因为最小公倍数是最小的满足是。倍数的数了,其他的答案都一定是最小公倍数乘以一个数。,并且规定一个数本身不是他的因数。不是次大的因数,所以我们考虑让。,满足它的最大的两个因数分别是。就比原来的大,一定不是答案。的倍数,所以考虑答案是。

2023-12-31 13:15:40 1017

原创 2023 NOIp 游记

CSP-S 当时没写是害怕当小丑,NOIp 反正可能要退役了,就没有什么小丑可言了,就先写了。CSP-S 游记。

2023-11-20 11:59:10 282

原创 2023 CSP-S 游记

其实老早就想写的,但是一想到可能挂分就先没写,现在正式的获奖名单也出了,就不担心当小丑了,就跑来写游记了。NOIp 游记。

2023-11-20 11:58:29 93

原创 CF1894B Two Out of Three

因为只是构造题,只要合理就可以随便造,所以可以先选一个出现多次的数字为特殊数字,然后把所有数字的非最后一个都给。我们可以考虑每种数字,如果数字只有一个,是不能满足任何一个条件的,那就随便给一个。再来考虑如何构造,可以直接钦定一种数字满足一个条件,其他所有数字满足另一种条件。所以,如果只有一个或者甚至没有两个及以上的数字,那么必定无解。,否则就会满足三个条件,所以一种数字最多满足一种条件。,然后对于每种数字的最后一种,如果是特殊数字,就给。,其他数字不满足任何条件,这样就恰好满足两个条件。

2023-11-16 16:10:04 67

原创 CF1893B Neutral Tonality

并且在插入后改为下降序列的某一个数字,那么后面的选择会变少,答案一定不会增加。的不会使答案增加,可以感性理解,如果原来的 LIS 没有选择。原来的 LIS,现在需要做的就是尽可能地保持答案不增加。,那么选择插入的降序序列则会让答案变劣,如果选择了。首先可以知道答案的下界就是序列。前插入即可,还需要将没插完的。是不劣的,并且如果在。,直接将目前剩下的所有。的数字按照降序全部在。可以肯定的是,将序列。所以这道题就很明了了。

2023-11-14 14:49:01 61

原创 CF1450C2 Errich-Tac-Toe (Hard Version)

将方案整体向上挪一格和两格可以得到一共三种通解,这三种通解需要改的棋子总数就是棋盘上的棋子总数,同样的,根据抽屉原理,必定有一种方式少于棋子总数的。实际上,如果你会简单版本,那么困难版本也没有那么难了。,就是一种通解,同样的,这样改可能会超过棋子总数的。所以分别统计个数,最后判断即可。同样考虑构造一种通解,如下,

2023-11-13 14:31:42 119

原创 CF1450C1 Errich-Tac-Toe (Easy Version)

实际上,图中的方式只是一种,整体向上挪一格和挪两个也是一种方式,那么这种不行,我们可以考虑其他的方式。三种更改方式可以覆盖所有的棋子,那么根据抽屉原理,至少有一种方式,更改的棋子少于总棋子的。,这样不好思考,实现也很不好写,所以我们可以考虑构造一种通解。所以我们只需要直接统计三种方式,然后那种符合条件,就改那种。全放在红格子上,那么更改次数就是总棋子数)。因为原本就没有,所以摆上后也不可能胜利。不过,因为更改的次数不能超过棋子总数的。如何放,都不可能胜利,而。的摆放,再考虑那些改为。

2023-11-13 14:30:48 37

原创 Pollard-Rho 学习笔记

其实很早就看到过了,下定决心去学的,居然是因为翻到之前口胡的题目,然后发现之前做法假了,继续尝试做的时候发现需要这个算法,于是,题目就绿->黑了。

2023-11-11 20:09:43 40

原创 SPJ 学习笔记

本博客只会讲本蒟蒻目前学习到的地方,所以如果有没讲到的地方还请见谅,等蒟蒻有时间学了再说。虽然本博客都是一些较为浅显的知识,但是写一道验证较为简单的 SPJ 题还是足够的。另外,本文的 SPJ 都以 C++ 为例。

2023-11-10 09:51:40 698

原创 CF1883E Look Back

需要的次数,只要把每两个数之间的差值都算出来,也就是次数的差分,再求一遍前缀和,就可以得到每个数需要的次数,再求一遍前缀和就是次数的总和。不过需要注意的是,一个数差分后的次数可以是负数,代表这个数比前面一个数可以少乘以几次。直到不小于为止,将会超时,所以考虑使用其他的方法进行优化。,相对比值不会变化,所以我们可以考虑对于最开始的。,同时前缀和不能是负数,因为你不能除以。,所以每个数乘的次数都是固定的。因为前后两个数可以同时乘以。的差值,那么这个差值加上。他必须得不小于最后的。,也就是两者需要乘以。

2023-10-27 23:00:52 80

原创 CF1883D In Love

依然会 TLE,所以考虑用个数据结构维护区间加,而每次加或者减一个区间就是单点修改,树状数组和线段树都可以完成,我选择了线段树。那么,我们考虑维护有多少对互不相交的区间,那么每次加或者删一个区间,就去算这个区间对答案的贡献,然后再看答案是否为。,那么加入和删去带来的答案变化都应该相同,只是一个是加,一个是减,所以我们没必要分开讨论。如果两个区间不相交,必须满足其中一个区间的左端点大于另一个区间的右端点,那么对于区间。如果每一次加或者删一个区间,再去暴力找有没有互不相交的区间的话,铁定 TLE。

2023-10-27 10:43:07 62

原创 如何证明组合数是整数

其实这是某大佬的 PPT 里的一个问题,觉得很有意思,就花了一些时间想了想。

2023-10-26 19:42:09 260

原创 CF1883G2 Dances (Hard Version)

可以发现,无论第一个值取几,很多之前匹配成功的还是能匹配,所以我们考虑先不管。大体上的思路应该和简单版本一致,建议先看本人关于简单版本的。,但实际上是一样的,只是我感觉这样写代码要方便一些。的话,就可以再匹配一个,也就是操作数少一个。显然过不了,就算优化排序的复杂度,也是。中的整数,所以答案的总值会变大很多倍。要少一个,所以我换了个思路,改成了用。与简单版本不同的是,困难版本的。大于等于没被匹配的最大的。很大,就会导致后面是负的)那么,现在来讨论,如果。小于没被匹配的最大的。,把剩下的先匹配了。

2023-10-23 14:12:26 111 1

原创 CF1883G1 Dances (Easy version)

同样无法匹配,所以可以直接忽略,跳到下一个,一直匹配,直到无法匹配为止,那么无法匹配的。不能匹配,那么对于后续更小的。的数量就是需要的操作数。开始,所以总复杂度是。考虑从大到小给每一个。,所以不会 TLE。

2023-10-23 14:11:53 124

原创 CF1883F You Are So Beautiful

正序扫一遍,当一个数字第一次出现时,直接将答案加上这个位置右侧最后一次出现的数字的个数,注意的是这个位置也要考虑,因为如果这个位置既是第一次出现,也是最后一次出现,那么只选这个数字的长度为。那么首先一个字串的左端点的数字必须第一次出现,右端点则必须最后一次出现,很容易地,我们想到可以预处理某点右侧最后一次出现的数字的个数,这个可以。如果满足这个条件,那么左侧一定没有第二种选法可以获得这个子串的前缀,同理右侧也无法获得这个子串的后缀,所以一定没有第二种选法可以获得这个字串。

2023-10-23 14:10:27 194 6

原创 CF1883C Raspberries

的倍数,那么计算每个数需要的操作数,取最小即可。最开始晃眼一看,感觉很难,仔细一读题,哦,原来。的情况,必须要有一个数是。的情况,要么是一个数是。的倍数,要么有两个数是。的倍数,那么取最小即可。

2023-10-23 14:09:17 103

原创 CF1883B Chemistry

所以可以直接扫一遍字符串,统计每个字符的数量,然后再统计数量是奇数的个数,如果这个个数大于。一个回文串,应该满足所有的字符的数量都是偶数或者其中一个字符的数量是奇数。性质题,因为可以随便排序,所以只需要考虑数量满不满足条件即可。

2023-10-23 14:08:42 52

原创 CF1884C Medium Design

接着,想到了可以枚举最小值,如果某个区间包含了这个最小值,那么这个区间加上后的答案一定是不优于不加上这个区间的答案,所以所有包含了这个最小值的区间都不需要加,那么再把所有最小值的答案取个最大值即可。可以发现,只需要区间修改和一次区间查询,所以实际上可以直接使用差分数组进行维护,如果不算上离散化要用到的排序的话,时间复杂度更优,代码也更简单。如果答案的最大值在区间 B,但是先加了区间 A,导致加区间 B 使答案不变,那么这样就会使答案变劣。的区间都是无效的,那么可以对答案做出贡献的只有两个端点都在。

2023-10-23 14:07:59 80

原创 CF1877C Joyboard

把所有可能的序列都输出来,就可以发现这个规律。一个比较明显的结论是,不同的数字个数只可能是。的倍数,所以一定会有三个不同的数字。可以随手写一个暴力的输出程序,假定。的情况,这种情况时,数量为。,重复若干次后直到遇到第。,所以这种情况的个数是。所以如果要求的数量大于。,那么整个序列都会是。,那么就会重复若干次。,这种情况的个数也是。也可以感性思考一下。

2023-10-09 22:55:11 77

原创 CF1878E Iva & Pav

最开始想到的是提前预处理出每个点往后若干位的与,因为与只可能变小不可能变大,所以可以二分找到最远的位置,但是这样无论时间还是空间都会爆掉,所以我们考虑优化一下这个办法。既然不能把每个点的后面的位置的与全部算出来,那么我们可以只算一部分,所以想到了 ST 表。要求从一个点开始最远可以选择那个点使得两点之间的数字的与大于等于。想到了 ST 表和二分,这道题应该就不难了。至于无解,如果当前位置的数本身就比。小就一定无解,否则就一定有解。

2023-10-06 19:00:33 96

原创 CF1873F Money Trees

因为要求区间的每个数都是右边的数的倍数,所以可以提前预处理每个点最远的满足这个条件的右端点,直接判断合不合法。枚举区间左端点,因为有了长度,所以可以直接获得右端点的值,直接验证右端点是否合法。还要求和要小于某个值,这个直接前缀和预处理即可。那么现在需要考虑如何快速验证答案是否正确。要求最长长度,想到可以二分答案。

2023-10-01 10:24:53 111

原创 CF1875D Jellyfish and Mex

每次操作肯定都是一次性删完某个数字,如果删除某个数字删一半又去删别的数字,答案肯定会变大。并且,在这个方法没有删除的数字就最后挨个删除就好,反正。所以我们可以考虑统计所有数字的数量,记为。,来计算删完某个数字的最小答案,记为。那么我们可以考虑用大于。所以我们只需要倒着求。

2023-10-01 10:24:19 127

原创 CF1875C Jellyfish and Green Apple

那么我们只需要考虑苹果数量少于人数的情况,每个人能分的苹果都必然少于目前的单个苹果,所以每个苹果都必须切一刀,那么答案数就会增加当前的数量,再把能分的都分了,重复这一过程,直到分完为止。的话,意味着人数拥有某个非二质因子是苹果数没有的,那么无论苹果数怎么平分翻倍,也无法成为人数的倍数,此时无解。因为如果让苹果数和人数都同时除以某个数时,有没有解应该都一样。首先我们可以考虑把能分的都先分了,再选择去切剩下的苹果。这样的话,对于某个苹果数和人数,人数必然是。,那么这时,如果人数不是。那么,什么时候无解呢?

2023-10-01 10:23:44 215

原创 CF1875B Jellyfish and Game

是偶数时,由第二个人结束游戏,和上面一种情况比较相似,如果第二个人的最大值比第一个人的最小值还要小,那么第一轮,第一个人不会交换,那么后续第二个人就可以成功交换,所以答案是总和减去第一个人的最大值加上第二个人的最小值。如果交换的不是对方的最大值,如果这个值本身就是你的最大值,那么对方又换回来,没有影响,如果不是,对方交换回去,你就损失了你的最大值,比你交换对方的最大值会亏损一些总和。如果用的不是自己的最小值去交换,那么总和会变小,对方也不会再交换你的最小值,所以这一步是亏的。快速地写完,发现 WA 了。

2023-10-01 10:23:07 131

原创 CF1873G ABBC or BACB

那么不变化完的话,答案就会变少,如果想要这一段答案不变的话,就必须让第。我们可以选择向左或者是向右变化,显然的,我们可以贪心,把所有的。做法很显然了,直接扫描一遍字符串,统计连续。的情况,什么情况下可以继续变化呢?既不是变化所需要的,数量还会变多,只有。的数量,最后就是总数减去最小的连续数。的出现是不可能继续变化的,同理对于。,同时数量为 0 的我们也要统计。向左变化,但是显然就可能浪费第。的数量,包括最右边和最左边的。的数量,那么,一定有一段的。的个数中最小的那个,和总共。的情况也是可以连续变化的。

2023-10-01 10:22:26 75

原创 P3101 [USACO14JAN] Ski Course Rating G

可以发现,如果一个连通块的长度符合条件,那么整个连通块的点都符合条件,那么我们能否在更新并查集的时候,顺便维护这个并查集里的起点的个数呢。考虑对所有的边按照权值从小到大排序,权值就是两个点的高度差,那么这样的话,我们就先加权值小的边,这样就可以尽可能地使。这样的话,只要这个并查集符合条件,那么就直接取出这个并查集的起点个数,乘以答案,再把这个连通块的起点个数改为。但是再仔细一看,有有些不一样,要求了起点至少到多少个点,不要求起点互通,求的也不是最小的。另外,因为是二维图,为了方便,我们采用二维转一维。

2023-09-13 10:45:52 50

原创 CF1867A green_gold_dog, array and permutation

显然,对于原数组较小的数,我们尽量让大的数,取全排列的较小的数,这样可以保证差是逐渐变小的,也就让。很简单的一道题,洛谷大概都不会开放题解通道?(实际上貌似每场比赛的 A 都没开放?所以直接拿个 struct 存,然后两边排序就好。

2023-09-13 07:37:52 313

原创 CF1867E2 Salyg1n and Array (hard version)

其实如果你在做 E1 的时候想到正解了,这道题都甚至不需要改 E1 的代码,直接交就好,这大概也是 E2 的分还没 E1 的高的原因。可以发现,有余数的情况,只会增加两次询问,而后面的操作会增加。因为一摸一样的思路,所以这里就不作介绍了,可以看看。次,所以不仅能过 E1,E2 也是随便过的。,所以询问最大次数是。

2023-09-13 07:37:28 65

原创 CF1867E1 Salyg1n and Array (simple version)

因为每次取得区间长度都是固定的,所以两段红色的区间长度也一定一样,因为两段长度和是余数,所以一段我们就取余数的一半。可以看到,与第一种情况的区别就是末尾多了一小截,那么我们需要考虑如何计算这一小截的异或和。使用这个性质可以发现,如果两个询问区间重叠,那么因为颠转,获得的异或和会转移到一起。的倍数的情况,直接枚举询问所有每一段就好,然后输出每一段的异或和的异或和。很容易想到,提前在前面计算这个长度的异或和,后续就可以和第一种情况一样了。在题目中都给定了是正偶数,所以不用担心余数是奇数的情况。

2023-09-13 07:37:14 57

原创 CF1867D Cyclic Operations

赛时没调出来,赛后调了一个上午,最后发现是有个地方没清零。

2023-09-13 07:36:59 54

原创 CF1867C Salyg1n and the MEX Game

此时 Bob 会移除中间的某个数,那么我们再加回来,直到 Bob 移除了。,那么 Bob 无论取走那个数,下一次最小的都一定是 Bob 取走的那个数。那么,我们直接猜测最优的操作是每次加入目前集合中不存在的最小的数。,来试图让答案变大,那么 Bob 就会移除一个数,最优的话是。所以想要答案尽可能的大,我们就只能每次选择最小的不存在的数。的数,答案将会再次变小,你就会无力回天了。的常数是接受不了的,可以想象,如果数据是。,这时,如果你使用之前的策略,答案也只是。,并且赛后才发现给的是有序的,连最开始的。

2023-09-13 07:36:41 101

原创 CF1867B XOR Palindromes

次的基础上,可以增加偶数次,即把两个对称位置一样的都改了,最多可以改到。为奇数的时候,最中间的一位可以改或不改,所以能成功地有。首先,我们可以统计前后对称位置不一样的对数,记为。实现可以用一个数组记录答案,但是千万不要用。位,能不能让原串变成回文串,其中。次,假设剩下前后对称位置一样的有。,不要问我为什么知道(痛苦面具)。为奇数,则最中间的一位不计入。

2023-09-13 07:36:27 125

原创 P1653 [USACO04DEC] Cow Ski Area G

如果把每个方格看作一个点,就是的子任务 B 了。

2023-09-12 07:50:33 53

原创 P5765 [CQOI2005] 珠宝

那么再继续假设,它的儿子里也有类似的情况,导致它的儿子必须填。P.S.蒟蒻不清楚是不是节点最少的情况,如有错误欢迎指出。来获得更小答案,并且让它的父节点编号也可能变小。我们可以观察一下样例,发现,如果使用最小的。比较大,整个树的总结点数就非常大,如下图。不妨假设某个节点,可以填入的最小编号是。的样子,但是做的时候没细想,直接开了。的节点,他不止需要一个编号必须为。个儿子,不然的话,可以让编号为。,让儿子更小,以获得更小的答案。,而正确答案呢,则是把一个有。的情况下,最小的编号总和。作为编号的话,至少也是。

2023-09-12 07:50:19 33

原创 CF1868B2 Candy Party (Hard Version)

建议先看以及我的。

2023-09-12 07:49:57 69

原创 CF1868B1 Candy Party (Easy Version)

那么我们再统计每个人需要接受和送出的糖果数的个数,如果接受和送出的糖果数的个数也不相等,那么就无解,否则,有解。其实还有个特殊情况,那就是原本就有的糖与平均数相同,但是思考一下就会发现不影响结果。我们只需要把原本就有的糖与平均数相同的人放在给糖过程中间,过一下手就好,比如。一颗糖就好,可以发现这样增加一个转手的过程不影响答案,并且也满足了。的需求,所以原本就有的糖与平均数一样不需要考虑,可以直接忽略。应该就是其中一个二次幂,是给出的还是收到的糖果数要看。刚好拥有的糖就是平均数,那么只需要让。

2023-09-12 07:49:44 146

原创 CF1869B 2D Traveling

但是我们完全没必要多转几次,因为这无法让答案变得更优。,那么就要增加若干的花费。当然,增加的花费可能为。理由很简单,两点之间线段最短,如果我们目前要从。需要花钱,那么如果再选择一个不是主要城市的。可以直接计算得出,所以不需要考虑,又因为。所以也不需要考虑,我们只需要提前预处理出。到离它最近的主要城市,途中转移几次到离。我们不应该到达任何非主要城市。最近的主要城市,那么答案就是。最近的主要城市,再到。

2023-09-12 07:49:29 100

原创 CF1872F Selling a Menagerie

原本我是 tarjan 再去拓扑的,但是调得我脑阔疼,又想到 tarjan 缩点的顺序本来就是反的拓扑序,所以可以边 tarjan 边记录答案,反着记就好。自然想到 tarjan 缩点,对于环外,就拓扑排序好了,对于一个环,显然无法满足所有的点,所以我们就直接选择值最小的点放最后就好了。对于每一个动物,我们都尽量让它比它害怕的动物先被卖。另外提一句,tarjan 真的难调,一生之敌啊啊啊。条边,必然存在环,所以只用拓扑排序是不行的。考虑拓扑排序,每次输出出度为。的点,然后再删点删边。

2023-09-12 07:49:18 45

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除