cf杂选
411 E
参考AC代码
|
|
思路
连通块染色 dfs
412 c
题意
二分答案 二分倍数而非答案
参考AC代码
|
|
413 E
题意
有n件物品和它的价格 需要敲好取m件 要求a和b两个人在这m件物品里分别至少喜欢k件
给出a和b喜欢物品的编号
求出最小的cost
参考AC代码
|
|
思路
物品只有四种状态:a和b都不喜欢 a喜欢b不喜欢 b喜欢a不喜欢 a和b都喜欢
分别用0 1 2 3四种状态表示他们 vector a和sum的编号与他们对应 sum求的是前i项和
用hash的思想把四种状态存好
首先从a和b都喜欢的状态可以遍历sum 接下来a和b分别还要取出喜欢的k-i件 若还有left剩余 在a或者b或者ab都不喜欢里面挑选
最后一个状态使用二分答案 二分的是找出012三种状态大于他们的最小的数 二分出的数字为l
接下来看012三种状态的剩余 若有剩余把前i项和都加上
这里存在一个问题 就是三个状态相加后可能大于left 这时要把多余的部分去掉
还需注意这里的最大值为1e18 因为1e9相乘的前n项和已经超过了int的范围
cf 414 C
题目要求
a和b分别有一个长度为n的字母集合 要填充到一个长度也为n的字符串中 a希望字典序最大而b希望字典序最小
假设他们都足够聪明 他们最后的字符串填充成什么样
参考AC代码
|
|
思路
贪心
把a按照升序排列 b按照降序排列 那么最后实际用到的分别就是n/2上取整的数字
贪心策略为:
首先按照奇偶性判断谁动
若a比b小 那么自然a把最小的放在最左边
若a比b大 那么两人都希望对方把该数放在第一个 所以此时不能考虑首位而要考虑末尾
此时a需要把最大的数字放到末尾确保字典序最小
b移动与a的策略同理
这里需要注意的是a的数量是n-(n/2)-1 因为如果n为奇数 那么最后a需要多取一个 这样确保a的数量是正确的
cf 414 F
题意
线段树
每次可以有2种询问方式
1是把l和r中所有数字某位的u变成v
2是求出l和r中的和
参考AC代码
|
|
思路
用hash的思想来存储线段树
0-9每个数位上存放的数字表示该数字乘存放的大小(10^x)表示该位的大小
例如 0 0 0 10 100 0 0 0 0 表示430
线段树上存放每个数字0-9的状态 sum表示该位存放的所有10的阶乘 next为指向下一个0-9数字的指针