【做题记录】Codeforces做题记录
最近决定写一些CF Div.1的题,练习一下速度和代码能力。
暂定从中考后的Codeforces Round #572开始。
大部分比较简单的题直接把题解写在这里,不单独开文章了。
Codeforces Round #572 (Div. 1)
Codeforces Round #573 (Div. 1)
Codeforces Global Round 4
Codeforces Round #576 (Div. 1)
A
省略
B
省略
Codeforces Round #580 (Div. 1)
B
显然若某一位上有\(3\)个数,那么就会形成环,答案为\(3\). 因此该图点数不超过\(2\log A\le 120\), 边数也是\(O(\log A)\)级别。
然后就要求一个新图的最短环,这个可以枚举环上的一条边,然后删掉这条边,求两端点的最短路。
时间复杂度\(O(n+\log^2 A\log\log A)\)
代码: 59195761
C
题解: https://www.cnblogs.com/suncongbo/p/11389254.html
Codeforces Round #583 (Div. 1 + Div. 2)
Codeforces Round #584 (Div. 1 + Div. 2)
E
原问题可以转化为,每列轮换后每行选一个数,使得总和最大。
设\(dp[i][S]\)表示前\(i\)列已选的行的集合是\(S\), 枚举轮换状态进行转移。提前求出这一行每个子集在所有轮换中的和的最大值即可得到一个时间复杂度为\(O((3^n+2^nn^2)m)\)的算法,可以通过E1题。
有个性质是只有按列最大值从大到小排序后的前\(n\)个列是有用的,因此只需考虑前\(n\)列。
时间复杂度\(O(3^nn+2^nn^3+nm+m\log m)\)
代码: 60827873
Codeforces Round #586 (Div. 1 + Div. 2)
E
以起点为根建DFS树,对于所有子树内没有任何一条返祖边指向子树外的子树,我们无法获得它内部的点权,但是可以获得其内部最大权垂直链的点权,而其他点的点权都可以获得,因此答案就是所有这种子树的内部最大权垂直链的最大值加上其余点的点权和。
时间复杂度\(O(n+m)\).
代码: 60831008
Codeforces Round #588 (Div. 1)
Codeforces Round #591 (Div. 1)
Codeforces Global Round 5
A
省略
B
省略
C
考虑二维怎么做: 按\(x\)排序,把每个\(x\)的点两两配对,消到只剩最多一个。然后相邻的配对,显然不会有相交。
三维就先按\(z\)排序,对每个二维平面执行二维算法,消到只剩最多一个。然后相邻的配对,显然也不会有交。
时间复杂度\(O(n\log n)\).
代码: 62854906
D
显然答案要么全是\(-1\), 要么全都不超过\(3n\). 将数组复制\(3\)倍,预处理\(r_i\)表示第\(i\)个点后面第一个小于其一半的位置,则某个点能延伸到的最远点就是上述数组的后缀最小值,减去该点的原始位置就是答案。
也可以对每个点二分然后用数据结构实现。
时间复杂度\(O(n\log n)\).
代码: 62725216
E
树的形态是一棵满二叉树下面挂若干个儿子,且要求每个点的左儿子的右儿子大小为奇数,右儿子的左儿子大小为偶数。那么考虑在两棵深度相同的树上加一个根合并起来,右儿子的左端点个数奇偶性会限制右儿子最左边的链上左儿子的有无,归纳易证只有左儿子最左边的链上儿子可有可无,其余的方案是确定的,答案一定为\(0\)或\(1\), 且对于一种深度,只有两个相差\(1\)的\(n\)答案是\(1\).
考虑生成答案为\(1\)的集合,归纳可证每次将两个数同时加上两数中的偶数\(+1\),就可以得到下一层的两个数。
时间复杂度\(O(\log n)\).
代码: 62864619
Codeforces Round #594 (Div. 1)
Codeforces Round #596 (Div. 1)
A
显然答案不超过\(\log n\). 枚举答案,转化为\(k\)个\(2\)的幂次和为\(n-ak\). 求出最少需要几个(\(\text{bitcnt}(n-ak)\))和最多需要几个(\(n-ak\)),若\(i\)介于两数之间则可以。
时间复杂度\(O(\log n)\)或\(O(\log^2n)\).
代码: 63769126
B
把一个数看作长度为\(10^5\)的数组,第\(i\)个位置若\(i\)不是质数则为\(0\), 否则为这个质数的幂次\(\mod m\). 将这个数组用\(m\)进制进行Hash并插入map
中,在map
中查询其每一位取负后的Hash值。
时间复杂度\(O(n\sqrt n)\)或\(O(n\log n)\).
代码: 63771856
C
某个位置的操作不会影响在它右下方的矩形。
设\(f[i][j]\)表示从\((1,1)\)到\((i,j)\)且在\((i,j)\)点由朝右转向朝下的方案数,\(g[i][j]\)表示从\((1,1)\)到\((i,j)\)且在\((i,j)\)由朝下转为朝右的方案数。
则有转移方程: \(f[i][j]=\sum^{j-1}_{k=lf[i][j]}g[k][j], g[i][j]=\sum^{i-1}_{k=lg[i][j]}f[i][k]\), 其中\(lf[i][j]\)等于最大的\(k\)使得\(sumx[i][k+1]\le n-k\), \(sumx[i][j]\)是第\(i\)行\(j\)处的后缀和,\(lg\)同理。这两个数组可以\(O(nm)\)双指针预处理,前缀和优化DP即可。
更简单的实现方式: 从后往前DP, 这样无需处理\(lf\)和\(lg\), \(lf[i][j]\)直接等于\(m-sumx[j]-1\).
时间复杂度\(O(nm)\).
代码: 63768042
D
题解: https://www.cnblogs.com/suncongbo/p/11768950.html
Codeforces Round #599 (Div. 1)
Codeforces Round #601 (Div. 1)
C
题解: https://www.cnblogs.com/suncongbo/p/11994646.html
Codeforces Round #602 (Div. 1)
Codeforces Round #604 (Div. 1)
C
题解: https://www.cnblogs.com/suncongbo/p/11996219.html
Codeforces Round #606 (Div. 1)
A
twone
删o
, 否则删中间那一个即可。
时间复杂度\(O(n)\).
代码: 66841692
B
建圆方树,统计经过两个点的点对数目即可。以第一个点为根建可以降低代码量。
时间复杂度\(O(n)\).
代码: 66848795
C
题解: https://www.cnblogs.com/suncongbo/p/12041672.html
D
题解: https://www.cnblogs.com/suncongbo/p/12072371.html
Codeforces Round #607 (Div. 1)
A
显然一次操作只会往原串后面加字符。直接模拟前\(m\)位,后面的计算即可。
时间复杂度\(O(n+m)\).
代码: 66904577
B
显然答案是\(0,1,2,3,4\)或无法完成。如果所有的都是A
就是\(0\), 所有的都是P
是无法完成,第一行、第一列、最后一行、最后一列中至少有一个全是A
就是\(1\), 四角的至少一格或者中间的至少一行或一列为A
则是\(2\), 与边界相邻的格子中有至少一个A
就是\(3\), 否则为\(4\).
时间复杂度\(O(nm)\).
代码: 66912353
C
求最小: 显然答案的下界是所有两端子树大小为奇数的边的边权之和。考虑转换为有根树后每个点奇数的儿子的随意匹配即可达到下界。
求最大: 显然答案的上界是所有边两端子树大小最小值之和。通过重心(点或边)的不同子树内任意匹配容易证明可以达到上界。
时间复杂度\(O(n)\).
代码: 66919108
D
设\(f[u][i]\)表示\(u\)子树内分成\(i\)个连通块最多有多少个正的,\(g[u][i]\)表示\(u\)子树内分成\(i\)个连通块,在保证正的个数最多的前提下根节点所在连通块点权和最大是多少。背包转移即可。由于根所在的连通块最多产生\(1\)的影响,因此优先保证\(f[u][i]\)最大是正确的。
时间复杂度\(O(n^2+nm)\).
代码: 66959746
E
首先对于一个电路来说,等效电阻与电路中所用电阻值之和成正比。那么对于一个串联电路,我们最优策略一定是贪心地选择最小的儿子去分担全部等效电阻。这就意味着答案一定是若干并联嵌套的结构。而且并联之间的嵌套没有意义,就相当于一层所有电阻并联的并联电路,因此所有电阻均分阻值即可。做法就是先建树然后树形DP(串联求最小值并联求和)求出最少用多少个电阻,然后均分阻值。
时间复杂度\(O(n)\).
代码: 66977391
【做题记录】Codeforces做题记录的更多相关文章
- NOIP2016考前做题(口胡)记录
NOIP以前可能会持续更新 写在前面 NOIP好像马上就要到了,感觉在校内训练里面经常被虐有一种要滚粗的感觉(雾.不管是普及组还是提高组,我都参加了好几年了,结果一个省一都没有,今年如果还没有的话感觉 ...
- PB中用oracle的存储过程返回记录集做数据源来生成数据窗口,PB会找不到此存储过程及不能正常识别存储过程的参数问题(转)
(转)在PB中用oracle的存储过程返回记录集做数据源来生成数据窗口 首先oracle的存储过程写法与MSSQL不一样,差别比较大. 如果是返回数据集的存储过程则需要利用oracle的包来定义游标. ...
- php大力力 [039节] 修改一下后台项目,同时启用印象笔记,要做的事情todo列表,记录在印象笔记,速度快一些
php大力力 [039节] 修改一下后台项目,同时启用印象笔记,要做的事情todo列表,记录在印象笔记,速度快一些
- 你只是看起来很努力(只是做了一遍真题,草草的对了一遍答案,然后冲出自习室继续她学生会的事情了,骗自己更容易)good——想起了自己在六大时候的无奈
(转)你只是看起来很努力一次上课,一个女孩子垂头丧气的跟我说,老师,我考了四次四级,还没过,究竟是为什么. 我说,你真题做了吗?单词背了吗?她拿出已经翻破了的真题,跟我说,你讲的所有的题目我连答案都记 ...
- 三点经验:长时间运行函数需要随时发射信号报告进度,以及设置bool变量随时可以退出,每做一步操作必须及时记录和处理相关信息
三点经验:长时间运行函数需要随时发射信号报告进度,以及设置bool变量随时可以退出,每做一步操作必须及时记录和处理相关信息 不能到最后一起处理,否则万一中间出错了,这个记录状态就全部都乱了.
- 20165237 2017-2018-2 《Java程序设计》第四周考试补做及2-3章编程题
20165237 2017-2018-2 <Java程序设计>第四周考试补做及2-3章编程题 测试JDB: 用JDB调试上一个程序,输入1.2.3: 2-3章编程题代码托管 (程序的运行结 ...
- Git学习记录 力做全网最强入门教程
目录 Git学习记录 力做全网最强入门教程 什么是GitHub? 什么是Git? Git的配置 Git的安装(只介绍windos操作系统下) Git的配置 至此我们的入门教程到此结束,更新中级教程要等 ...
- Go: LeetCode简单题,简单做(sort.Search)
前言 正值端午佳节,LeetCode也很懂.这两天都是简单题,早点做完去包粽子. 故事从一道简单题说起 第一个错误的版本 简单题 你是产品经理,目前正在带领一个团队开发新的产品.不幸的是,你的产品的最 ...
- Codeforces 杂题集 2.0
记录一些没有写在其他随笔中的 Codeforces 杂题, 以 Problemset 题号排序 1326D2 - Prefix-Suffix Palindrome (Hard version) ...
- [Codeforces 872]比赛记录
强行打了$cf$上的第一场比赛,现在感觉自己的$rating$会炸飞= = A 这是练习输入输出吗QAQ,竟然$WA$了两遍QAQ,我$WA$的一声就哭了出来啊QAQ B 好像很水的乱扫就好了,m ...
随机推荐
- SQLiteDatabase执行update、insert操作的时候,conflictAlgorithm参数的含义区别
/** * When a constraint violation occurs, an immediate ROLLBACK occurs, * thus ending the current tr ...
- leetcode-174. Dungeon Game 地下城游戏
一道关于骑士救公主故事的题目. 一些恶魔抓住了公主(P)并将她关在了地下城的右下角.地下城是由 M x N 个房间组成的二维网格.我们英勇的骑士(K)最初被安置在左上角的房间里,他必须穿过地下城并通过 ...
- Signal Processing and Pattern Recognition in Vision_15_RANSAC:Random Sample Consensus——1981
此部分是 计算机视觉中的信号处理与模式识别 与其说是讲述,不如说是一些经典文章的罗列以及自己的简单点评.与前一个版本不同的是,这次把所有的文章按类别归了类,并且增加了很多文献.分类的时候并没有按照传统 ...
- nginx屏蔽版本号
nginx的http段添加 server_tokens off; 在nginx.conf文件内如上增加server_tokens off;就隐藏了
- .NET Framework 概述
文章标题:.NET Framework 概述 地址:https://docs.microsoft.com/zh-cn/dotnet/framework/get-started/overview NET ...
- 《JavaScript DOM编程艺术》(第二版)学习笔记(一)
这本书去年就买了但一直没看,闲暇的时候看了下,发现里面写的内容还真是不错,所以决定一边在博客上记录些学习的笔记,以便以后观看及查找方便. js文件最好的做法是放在< body>标签里,这样 ...
- 2018 ACM 国际大学生程序设计竞赛上海大都会赛重现赛 J Beautiful Numbers (数位DP)
2018 ACM 国际大学生程序设计竞赛上海大都会赛重现赛 J Beautiful Numbers (数位DP) 链接:https://ac.nowcoder.com/acm/contest/163/ ...
- 牛客练习赛48 A· 小w的a+b问题 (贪心,构造,二进制)
牛客练习赛48 A· 小w的a+b问题 链接:https://ac.nowcoder.com/acm/contest/923/A来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C ...
- Git学习笔记08-远程仓库
因为想在家里和公司都能用到一套代码,所以选择上传到github,记录一下使用经验. 需要安装git,和注册github 以下操作是第一次将自己的代码上传到GitHub上 1)创建github项目 1. ...
- golang中fmt的'占位符'使用
golang 的fmt 包实现了格式化I/O函数,类似于C的 printf 和 scanf. # 定义示例类型和变量 type Human struct { Name string } var peo ...