TC做题笔记
SRM593 Div1Medium——May The Best Pet Win(bitset优化)
Description
给出n个元素取值的max、min,把这n个元素分割成两个集合,求如何分割使两个累和差的最大值最小
\(n\le 50,min,max\le 10000\)
Solution
把题意化归成式子,就是 求\(max(A\sum{max}-B\sum{min},B\sum{max}-A\sum{min})\)
- 由于已知\(A\sum{max}+B\sum{max}\),\(A\sum{min}+B\sum{min}\)
- 分别将其定义成Max和Min
- 那么上述式子可以化为\(max(Max-B\sum{min}-B\sum{max},B\sum{min}+B\sum{max}-Min)\)
- 可以发现我们只用计算出\(B\sum{min}+B\sum{max}\)的所有情况即可
- 观察数据可知,这个值可以穷举.
- 同时可以用bitset进行常数优化
SRM549 Div1Medium——Magical Hats(状压dp)
Description
有一个矩阵,矩阵中有num个帽子,有k个硬币塞在帽子下。
小Q有x次机会,每次选择一个帽子打开,小C可在打开帽子前改变硬币放的位置,且要总是满足每一列(行)帽子数+硬币数为偶数。
小C和小Q都足够聪明,求小Q收益的最大值。
\(n,m,k,num\le 13\)
Solution 剧毒的"聪明".
- 在这里,聪明大概可以理解为:小C总是让小Q取不到硬币,就算能取到,也是最小的硬币.而小Q会在未被打开的帽子中选择一个使自己收益最大的方案.
- 可以这么理解: 在小Q翻开这个位置之前,小C要决定在不在这个位置上放硬币.
- dp的定义为一个三进制数,来表示某一个帽子的状态.
- 表示确定这个帽子里不放硬币.
- 表示确定这个帽子里放硬币.
- dp的值为小Q能取到的硬币数
- 可以发现这个二进制数无形中维护了翻出硬币的个数(cnt of 2)还有翻开帽子(cnt of 1+2)的个数
- 利用记忆化搜索.当剩下的硬币都确定在哪时,就可以进行判定是否合法
- 当小Q的次数用完时,如果硬币还没放完,那就继续确定硬币的方法,如果有一种合法方案,就返回零
- 由于小Q是聪明的,他会选择最优的取的方案,这里去max
- 由于小C是聪明的,他能选择的是在不在小Q取的地方放硬币,所以这里取min
SRM552 Div1Medium——Fox And Flower Shop Div One(前缀和+DP+ST表优化)
Description
给出n*m的矩阵,格子有三种可能,为A,B或为空
求取出两个不相交的矩阵,使其\(|Sum(A)-Sum(B)|\le K\)且\(Sum(A)+Sum(B)\)最大
\(N,M<=30,K<=900\)
Solution
- 最暴力的写法n^8枚举两个矩阵 \(O(n^8)\)
- 然后稍微优化一波,预处理出以某个点为分界点,Sum(A)-Sum(B)时Sum(A)+Sum(B)的最大值,然后再求解 \(O(n^6)\)
- 再想一下,答案的两个矩阵一定分布在一行或一列的上下,这样枚举加验证的复杂度为 \(O(n^5)\) 这样就可以过了
- 但实际上代码可以再优化.也是枚举行或列,可以发现相邻的两行(列)之间是有递推关系的,所以不用重新算的.为了保证复杂度,关于差值\(\le K\)的方面可以用ST表解决,这样的复杂度为\(O(n^4+n^3logn)\)
SRM561 Div1Medium——Circles Game(博弈)
Description
给定一个森林,轮流取点,当且仅当子树一个点被取过,该点不能取.
Solution
- 可以发现,每个树都是一个子游戏.
- 取了一个点后,这个点到根节点的路径都不能取了,发现这样就把树有分割成了许多子树.
- 那么后继状态的sg值就是这些子树sg值的异或
- 为解决子树的sg值,就要先计算子树作为根时的sg值,由此递归,然后计算出答案.
- 时间复杂度\(O(n^2)\)
SRM568 Div1Medium——Equal Sums(建图)
Description
给定一个有未知数的待补充矩阵,给定的值满足小于等于9,并且要使矩阵满足在所有列中取一个数,并且所有数的行编号要不同,使所有这样的组合的和都相同.
求方案数(mod1e9+7)[满足有有限解]\(n\le 50\)
Solution
- 可以得到结论,对于满足这样关系的矩阵,每行每列都有特征值
- 那么对于已知的值,只用枚举行特征值(枚举次数<=10),就可以知道行的特征值.
- 由于这些递推关系可以传递,所以可以连边,枚举一个值之后就把联通的特征值全部计算出来
- 但同时要考虑去重,因为如果每列特征值都+1,行特征值都-1,那么结果也会满足条件.但这样的结果是一样的,不能重复算
- 所以只要使列特征值的最小值严格等于0就好.
- 关于这个可以通过容斥解决
SRM416 Div1Medium——CustomDice
Description
求使互不相同六个正整数的和小于等于n的方案数.
\(n\le1e6\)
Solution
- 难点在于很难让这六个数不同.
- 先令这六个数有序,设这六个数为\(a_1,a_2,a_3,a_4,a_5,a_6\)
- 令\(b_1=a_1,b_2=a_2-a_1...b_6=a_6-a_5\)
- 同时发现:\(6b_1+5b_2+4b_3+3b_4+2b_5+b_6=n\)
- 然后问题就转换成找到\(b_{1...6}>0,\sum_{i=1}^{6}b_i*i<=n\)的方案数.
- 然后直接dp转移+前缀和优化就好了,时间复杂度\(O(6n)\)
TC做题笔记的更多相关文章
- C语言程序设计做题笔记之C语言基础知识(下)
C 语言是一种功能强大.简洁的计算机语言,通过它可以编写程序,指挥计算机完成指定的任务.我们可以利用C语言创建程序(即一组指令),并让计算机依指令行 事.并且C是相当灵活的,用于执行计算机程序能完成的 ...
- C语言程序设计做题笔记之C语言基础知识(上)
C语言是一种功能强大.简洁的计算机语言,通过它可以编写程序,指挥计算机完成指定的任务.我们可以利用C语言创建程序(即一组指令),并让计算机依指令行事.并且C是相当灵活的,用于执行计算机程序能完成的几乎 ...
- SDOI2017 R1做题笔记
SDOI2017 R1做题笔记 梦想还是要有的,万一哪天就做完了呢? 也就是说现在还没做完. 哈哈哈我竟然做完了-2019.3.29 20:30
- SDOI2014 R1做题笔记
SDOI2014 R1做题笔记 经过很久很久的时间,shzr又做完了SDOI2014一轮的题目. 但是我不想写做题笔记(
- SDOI2016 R1做题笔记
SDOI2016 R1做题笔记 经过很久很久的时间,shzr终于做完了SDOI2016一轮的题目. 其实没想到竟然是2016年的题目先做完,因为14年的六个题很早就做了四个了,但是后两个有点开不动.. ...
- LCT做题笔记
最近几天打算认真复习LCT,毕竟以前只会板子.正好也可以学点新的用法,这里就用来写做题笔记吧.这个分类比较混乱,主要看感觉,不一定对: 维护森林的LCT 就是最普通,最一般那种的LCT啦.这类题目往往 ...
- java做题笔记
java做题笔记 1. 初始化过程是这样的: 1.首先,初始化父类中的静态成员变量和静态代码块,按照在程序中出现的顺序初始化: 2.然后,初始化子类中的静态成员变量和静态代码块,按照在程序中出现的顺序 ...
- SAM 做题笔记(各种技巧,持续更新,SA)
SAM 感性瞎扯. 这里是 SAM 做题笔记. 本来是在一篇随笔里面,然后 Latex 太多加载不过来就分成了两篇. 标 * 的是推荐一做的题目. trick 是我总结的技巧. I. P3804 [模 ...
- PKUWC/SC 做题笔记
去年不知道干了些啥,什么省选/营题都没做. 现在赶应该还来得及(?) 「PKUWC2018」Minimax Done 2019.12.04 9:38:55 线段树合并船新玩法??? \(O(n^2)\ ...
随机推荐
- 究竟什么是Java异常?
第四阶段 IO 异常处理 没有完美的程序,所以我们需要不断地完善,考虑各种可能性,我们要将除了自己以外的任何用户或者操作者都当成傻子来考虑问题 在我们开发过程中 我们运行时常常会遇到 这样java.l ...
- 将mysql中一行中的几个字段 转换成一列并从其他数据库中查对应的邮件信息
--将项目中的总监,经理,等的邮箱合并为一行 SELECT GROUP_CONCAT(t.USER_EMAIL SEPARATOR ' ') mail_address FROM portal.t_ac ...
- redis通用命令
1.keys pattern 含义:查找所有符合给定模式(pattern)的key keys * 遍历所有key keys he[h-l]* 遍历以he开头,第三个字符为h-l之间的所有key key ...
- 记录一次hadoop2.8.4版本RM接入zk ha问题
背景: 公司将线上hadoop RM接入ZK 实现高可用 但ZK Znode 默认存储1M,当存储数据量大时候可能导致线上业务的崩溃 处理方案如下: 1,修改ZK配置 增加默认存储上限 2,修改RM数 ...
- 剑指offer14:输入一个链表,输出该链表中倒数第k个结点。
1. 题目描述 输入一个链表,输出该链表中倒数第k个结点. 2. 思路和方法 可以用两个指针,一个指针遍历到第k个结点的时候,第二个指针再走到第一个节点,然后两个指针的距离始终保持k-1.这样,当第一 ...
- 从用户在浏览器输入URL回车之后,浏览器都做了什么
在直接列出执行的步骤之前先来普及几个知识,相信了解完这些知识之后会对前后端的交互有更深入的理解. 1.TCP连接 TCP:Transmission Control Protocol, 传输控制协议,是 ...
- Go语言操作NoSql
NSQ平台 NSQ是目前比较流行的一个分布式的消息队列,本文主要介绍了NSQ及Go语言如何操作NSQ. NSQ NSQ介绍 NSQ是Go语言编写的一个开源的实时分布式内存消息队列,其性能十分优异. N ...
- .Net C# RSA签名和验签重写
namespace com._80community.unittest.CUP { /// <summary> /// CUP Client /// </summary> pu ...
- Java基础第一天--继承、修饰符
继承 继承的概述: 继承是面向对象三大特征之一.可以使得子类具有父类的属性和方法,还可以在子类中重新定义,追加属性和方法. //创建父类 public class Fu{ public void sh ...
- 系统性能分析-vmstat命令详解
最近温馨巩固Linux 操作系统的 vmstat命令,这个命令所能打印的系统信息满多的,比较好用,就顺当记录下重要的点,方便以后排查系统问题时拿出来用 字段 含义 procs 进程信息字段: -r:正 ...