Educational Codeforces Round 120
一言:
孤独的人不会伤害别人,只会不断地伤害自己罢了。
——我的青春恋爱物语果然有问题
后四题唯一场切题,(别问我为什么只有这一道)。
读完题之后,理一下思路,可以很容易的想到一种贪心思想,就是我们找到这个序列中最小的数,对他执行
首先对于符合题意的序列,输出
接着我们求出要使得总和小于给定总和总共需要减去的数,即
所以我们显然有
由于
对于这道题,我们可以非常容易的通过
但是很显然,这样是有重复的,这也是本道题的难点。
但是实际上,我们并不关心具体是那个区间修改了,我们可以直接枚举发生变化过的所有区间
对于
最后累加起来就可以了。
看见这个绝对值就很不爽,我们可以考虑对于每个人定义一个数组
那么,我们就可以把答案重新定义为
接着我们对这个式子进行一系列的恒等变形:
可以发现,减号之前部分是定值,右边括号内也是定值,要使右边减的越小,则根据排序不等式,则括号内值越小,
虽然但是,这样并没有结束,你会发现有一些不合法的方案,就是你求出来
所以最终复杂度
题目给到了两个关键信息,阶乘的连乘,完全平方数。那我们就希望能不能将阶乘的连乘简化为一个完全平方数再乘一些数。
实际上还真就可以简化。有以下恒等式:
因为
然后我们在通过一系列的样例观察,发现好像至少可以选出
首先对于
接着对于剩余的
对于剩余情况,显然
所以得证,但是并不一定是最优解。
我们定义
如果
接着枚举
接着枚举
否则输出
但是你总不可以暴力求阶乘吧? 实际上,每个阶乘是不是平方数只与其的质因数分解后,每个质因数的个数是不是偶数有关,想到偶数,你是否有想到异或?
我们可以考虑给每个质因子赋一个哈希值,定义一个阶乘的
显然,如果
时间复杂度
-
如果你发现当你求方案加和时存在重复方案,则可以考虑将每次将要求解的子问题多限定一些条件达到去重目的。
-
你要求最值,但是通过你的办法求出时可能存在不满足题目条件的,那你可以想想这些解有没有可能是最优的。
-
多观察样例找规律。
-
。 -
排序不等式。
-
如果要看一个数出现了奇数次还是偶数次,请别忘记异或。
-
如果判断一个数出现次数的奇偶性仅仅通过异或的话,可能会出现另外的数把当前数给异或掉了,所以此时可以考虑哈希来尽量避免这种重复。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】