Codeforces Global Round 14(A-G)
感谢wxy_大佬给的E的思路
A
考场:n很小,随机化1e3次就好了。
正解:直接从1-n开始加,假如sum=x就交换
无解的情况就是
B
手摸下可以发现一个单位正方形只能由2个/4个正方形组成,考虑除以2 or 4之后是否是完全平方数
C
考场:考虑2个的时候4个数 a b c d 升序
若这样选 ac bd
假设最优
a+c-b-d<a+d-b-c
得 a+b+2c<a+b+2d 显然成立
所以sort一遍 每m个一组 最后判断是否不超过x
别人的:优先队列找当前最小即可
D
考虑l=r的情况,我们可以发现,ans=[1,l]在[l+1,r]没出现的个数。
考虑类比到l<r,最优策略应该是先统计有出现的,再将[l+1,n]中出现次数大于1的给到[1,l]总共给cnt/2个。
l>r同理
E
考虑令开机的为1不开机的为0,那么一定不存在连续超过2个0,且每段1之间必定只有1个0间隔。
由于n只有400,考虑dp。
设f[i][j]为到i时分j段1的方案数。
初始化即 f[1][1]=1 f[i][1]=f[i-1][1]*2。
即设前面那段为a,后面单独的为b,有2种方案: ab/ba。
先枚举i,之后枚举j表示当前分几段,后面枚举k,表示第j+1段的len。
首先 i+k+1代表着当前的长度(原来为i,这一段为k,间隔的0为1)
$ f[i][j]C[i+k+1-j][k]p[k-1]$ 代表 到i分j段的方案数乘上当前所有的1(因为j+1段,所以j个间隔0)选出k个来作为新段的组合方案再乘上k个1任意排列的方案数。
F
首先, 肯定不行,因为不会凭空产生。
反之,必定可以,因为总会有一种排列使得所有的前缀和都大于x*i。
我们考虑这是在树上的,当前节点为x,子节点为y。
我们可以发现,应该先考虑叶子节点,再从底层转移到上层,所以先dfs(y)。
考虑 ,于是我们直接顺序记录进去,并更新 。
否则,我们应该从x去修到y,倒序记录这条边,因为要修好x及其以上的节点才能推到y。
关于路径记录考虑开个双端队列即可。
G
__EOF__

本文链接:https://www.cnblogs.com/xugangfan/p/15872252.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】