解答:注意到数据很小,枚举即可。
参考代码(from 队友 R):
题意:给定以空格隔开的一些单词,剔除其中的 bubble
和 tapioka
(必须是整个单词),并按原相对顺序输出。若无可输出,输出 nothing
。
解答:注意整个单词相同,因而不可直接使用 replace
方法。
参考代码(PYTHON):
解答:经典贪心(优先队列模板题),此处略去。
如果有会证明的哥哥,一定要浇浇我 qwq。
队友搞出来的,我不会。赛中一直在想一些熟知不等式放缩找界,结果队友已经搞完了。我:???
参考代码(from 队友 R):
题意:给定一些等长 01
字符串,选择其中 x 个进行按位或操作,问至少需要选取其中多少个字符串才能得到全 1
?如果不能则输出 -1
。
制约:字符串长度不超过 500 ,数量不超过 15 。
解答:看到数据范围,明显是枚举子序列。
1000 ),某选手使用最大子段和的贪心思路,想出了如下算法:
即使用最大子段和来更新答案。这样的做法显然错误,容易构造反例 6 -8 7 -42
,上述算法将会找出最大子段和 7
,随后与该段长度相乘得到 7
。实际上,我们选取 6 -8 7
,可得到更优的 3 \times (6 - 8 + 7) = 15 。
给定 K, \;L\;,试构造一组长度至少为 L 的、满足原题制约的数据,使得上述算法与正确解刚好差 K 。若不能构造,则输出 -1 。
解答: 原题的话,看到数据范围,直接暴力即可。因为 n \lt 2000 ,不妨直接考虑 L = 1999 。
关键在于「刚好差 K 」,注意到最大子段和的算法不会选择和为负数的区间,我们在区间最开头放一个负数 - x ,其他都保证为正数。
题意:其实有点类似游戏《华容道》,不过感觉没《华容道》好玩。在 6 \times 6 的棋盘中,摆放着不超过 10 个1 \times 2 和 1 \times 3 的方块,或横或竖。每次操作,只能向其长方向移动(而不能向其宽方向移动)一格。红色的方块编号为 1 ,你的任务是在 10 步之内将其移动至 (3, 6) 。如果可以,输出最短步数,反之输出 -1 。
解答:十步之内然后又是最短路的,这提示我们 BFS,基本没啥细节。这时候就要感谢他出的不是《华容道》了。
题意:平面上给 n 个点,求任意三点能组成的最大四边形面积。
相似题目: / ,这两题是一样的,对解决此题有帮助。
解答:如果解决了上面的题目,容易知道:最大四边形的一些顶点一定在凸包上(反证)。其次此题也可用
旋转卡壳是一种简单的算法,其核心是“旋转”着枚举对踵点对,进而求解凸包最远点对距离(也称凸包的直径)。对踵点对刚好“卡”住整个凸包(众所周知,又称凸“壳”),因此该算法被形象称作 。另外,由于汉语博大精深的多音字现象,此算法有 16 种读音。算法复杂度为 \mathcal O(n)
具体而言,先求出凸包,如果凸包上仅有 3 个点,说明另一点在凸包内(即构成凹多边形),此时需要枚举减去的部分。否则,旋转卡壳着枚举凸包点对作为四边形的对角线即可。
代码实现上,注意到输入全是整数,无需使用浮点数(实际上能避免就避免,何老师(Heltion)说过,全是 double
的板子是没有价值的)。
模板部分: (如果看到本文时链接失效了的话,你可以网上找找吉如一老师的代码,注意
d} ,这种模合数的问题,往往是对该合数做唯一分解,随后对每种素数分别求值,最后使用 \rm crt 合并。于是设 d 的素因子包含 p ,提出 p 。结合 exlucas
的思想(即上面的套路,将素因子全部提出来,由裴蜀定理,此时分母必有逆元),则有 :
复杂度:不会算,但是很快。
参考实现:代码太长了就不放了,基本都是模板。注意如果全局使用 int128会超时。
关于 k
:分解约数的时候稍微求一求就好了。这里有一段经典代码,用于求解阶乘的某因子个数: