【做题记录】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 ...
随机推荐
- 【微信支付】公众号 JSAPI支付 HTML5(使用MUI前端框架)+WebApi 实现流程
必要参数: 1) AppID,AppSecret : 在微信公众号后台管理—>(菜单栏)开发 —> 基本设置 2)商户号 :在微信公众号后台管理—>(菜单栏)微信支 ...
- .net Core如何对静态文件的访问进行鉴权操作?
之前给公司开发了一个文件管理服务,最基本的功能就是文件的上传下载,以及更新删除.预览:负责公司各个子系统的相关附件的管理,所有的接口都通过AOP来进行身份拦截认证了,但是在进行预览的时候,因为采用的是 ...
- JDBC 学习复习10 编写自己的JDBC框架
首先万分感谢狼哥 孤傲苍狼 博客,整个jdbc学习的博客资料 链接为http://www.cnblogs.com/xdp-gacl/p/4006830.html 详细代码见狼哥博客,列出我学习过程中遇 ...
- ASP.NET WEB应用程序(.network4.5)MVC 程序的结构解读1
https://www.cnblogs.com/-beauTiFul/p/8036509.html 简介 开发环境:VS2015 ASP.NET:可以开发出几乎所有运行在Windows上的应用程序:. ...
- Django rest-framework框架-组件之分页
分页: a. 分页,看第n页, 每页显示n条数据 from rest_framework import serializers from api import models from rest_fra ...
- 1、java集合:java集合详解及类关系图
List和Set继承自Collection接口. Set无序不允许元素重复.HashSet和TreeSet是两个主要的实现类. List有序且允许元素重复,支持null对象.ArrayList.Lin ...
- React中setState如何修改深层对象?
在React中经常会使用到setState,因为在react生态中,state就是一切.在开发过程中,时长会在state中遇到一些比较复杂的数据结构,类似下面这样的: 这时需要我们修改list中obj ...
- web容器(weblogic、resin、tomcat、jboss对比)
WebLogic 12c Linux静默安装 weblogic11g 密码忘记解决方案 glassfish和tomcat各自的优势和劣势 Linux Resin4.0 安装配置(优质) 对比 . we ...
- 怎么处理Win10系统更新提示代码0x80070057的错误?
在使用好系统重装助手重装了Win10系统后,由于每个用户的电脑配置不同,有些用户会在更新时出现0x80070057的错误代码.下面就教大家Win10系统更新出现0x80070057错误该怎么解决. W ...
- 关于stm32 SDIO初始化TF卡 失败的问题
类似问题:http://www.openedv.com/thread-33232-1-1.html 现象:初始化4bit SDIO模式的TF卡,卡死在初始化过程中. 问题现象代码移植于野火开发板相关例 ...