
Codeforces Global Round 14 A B C D E 题解
发布日期:2021-05-07 10:36:05
浏览次数:27
分类:精选文章
本文共 6001 字,大约阅读时间需要 20 分钟。
游记:
开始没有理解A的题意,之后发现没有重复元素,20分钟才过......
B的规律一开始想的过于简单,WA了一发,后来才过
C的规律大概想到了,但是每次结束开始没有把答案清零WA了一次,一个半小时过了
DE两道题感觉都有思路,都尝试打一打,最后一个小时十分钟过了D,E放了
题解:
A. Phoenix and Gold
题意:
已知n个互不相同的数字,求一种排列方式,使得任意位置的前缀和都不是x
分析:
- 从互不相同入手,如果当前排列使得某位置前缀和是x,只需将该位置后面的元素与前面元素掉换位置即可
- 当且仅当所有数字之和恰等于x,无解(因为无法调换后方元素)
时间复杂度:
O(Tn)
参考程序:
#pragma GCC optimize(3)#pragma GCC optimize(2)#pragma GCC optimize("Ofast")#pragma GCC target("avx,avx2,fma")#pragma GCC optimization("unroll-loops")#include#include #include #include #include #include
B. Phoenix and Puzzle
题意:
n个完全相同的等腰直角三角形,是否可以组成正方形
分析:
- 显然,单个正方形只能由以下两种方式形成
- 由这两种正方形可以形成其他正方形
- 这里注意,由于左边图形边长是直角边,右边边长是斜边,所以不能够混搭
时间复杂度:
O(T)
参考程序:
#pragma GCC optimize(3)#pragma GCC optimize(2)#pragma GCC optimize("Ofast")#pragma GCC target("avx,avx2,fma")#pragma GCC optimization("unroll-loops")#include#include #include #include #include #include
C. Phoenix and Towers
题意:
n个小于等于x的数字,分为m组,请问是否可以使得每组和的差都小于等于x
分析:
- 如果i组为当前和是p,且其是最小的组,那么将下一个数字分给i组一定可行
- 即:p≤q,且若z≤x,那么一定有p+z≤q+x
- 最后遍历检查即可
时间复杂度:
O(T)
参考程序:
#pragma GCC optimize(3)#pragma GCC optimize(2)#pragma GCC optimize("Ofast")#pragma GCC target("avx,avx2,fma")#pragma GCC optimization("unroll-loops")#include#include #include #include #include #include
D. Phoenix and Socks
题意:
n只带颜色的袜子,其中l只左脚,r只右脚,每次操作,可以使得左右属性互换或者更换颜色,问最少多少次能够两两配对
分析:
- 如果可以配对,则直接配对,买双袜子花费0
- 如果同颜色且同脚,或不同颜色且不同脚,则将其配对,每双花费1
- 如果同脚且不同颜色,将其配对花费2
- 注意将3情况转化为2情况,可以优化答案,例如:
- 但是最优情况应该是:
时间复杂度:
O(T*乱搞)
参考程序:
#pragma GCC optimize(3)#pragma GCC optimize(2)#pragma GCC optimize("Ofast")#pragma GCC target("avx,avx2,fma")#pragma GCC optimization("unroll-loops")#include#include #include #include #include #include
E. Phoenix and Computers
题意:
n台电脑排成一行,如果一台电脑前后都开机了,那么他也会自动开机,如果需要全部开机,有多少种方法
分析:
- 看到400的数据范围,考虑立方复杂度的算法,不难想到区间DP
- 状态设置:因为和元素对应信息无关,所以应该不是平时所考虑的dp[l][r]
- 发掘一些信息,题目所说的自动开机显然不可传递,那么对于任意区间,如果最后一步自动完成位置不同,那么会给答案带来不同的贡献
- 所以把区间长度和最后一步补全的位置作为状态设置
- 但是状态转移时注意:也有可能不需要使用自动,即,手动完成最后一步,这需要最后一步在最左边或最右边
- 那么不妨写出状态:f[len][cnt]表示长度为len-1台电脑,其中第cnt台是手动开机的
- 那么f[len][cnt]可以考虑链接一段长度为k的段,使其贡献累加在f[len+k+1][cnt+k]上
- 记为
- 接下来考虑贡献的计算方法
- 假设对于长度k-1的区间,有x种方法,那么对于长度为k的区间,每次可以在左边或右边累加一个,所以其贡献为2x
- 可以将其放置到任何两个元素当中,所以一共有
种方法
- 所以
代码实现:
可以考虑先预处理排列组合C[r][n]和pow2[n],之后长度从小到大递推过去
时间复杂度:
参考程序:
#pragma GCC optimize(3)#pragma GCC optimize(2)#pragma GCC optimize("Ofast")#pragma GCC target("avx,avx2,fma")#pragma GCC optimization("unroll-loops")#include#include #include #include #include #include
发表评论
最新留言
路过,博主的博客真漂亮。。
[***.116.15.85]2025年04月09日 22时44分07秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
云计算之路-阿里云上:docker swarm 集群故障与异常
2021-05-09
上周热点回顾(2.19-2.25)
2021-05-09
云计算之路-阿里云上:博客web服务器轮番CPU 100%
2021-05-09
云计算之路-阿里云上:服务器CPU 100%问题是memcached连接数限制引起的
2021-05-09
上周热点回顾(3.26-4.1)
2021-05-09
上周热点回顾(6.25-7.1)
2021-05-09
【故障公告】10:30-10:45 左右 docker swarm 集群节点问题引发故障
2021-05-09
工作半年的思考
2021-05-09
不可思议的纯 CSS 滚动进度条效果
2021-05-09
【CSS进阶】伪元素的妙用--单标签之美
2021-05-09
惊闻NBC在奥运后放弃使用Silverlight
2021-05-09
IE下尚未实现错误的原因
2021-05-09
创建自己的Docker基础镜像
2021-05-09
Python 简明教程 --- 20,Python 类中的属性与方法
2021-05-09
KNN 算法-理论篇-如何给电影进行分类
2021-05-09
Spring Cloud第九篇 | 分布式服务跟踪Sleuth
2021-05-09
CODING 敏捷实战系列课第三讲:可视化业务分析
2021-05-09
工作动态尽在掌握 - 使用 CODING 度量团队效能
2021-05-09
CODING DevOps 深度解析系列第二课报名倒计时!
2021-05-09
数据结构第八节(图(下))
2021-05-09