杂题专选-二
集合操作
参考代码
|
|
详解
集合的并:set_union
集合的交:set_intersection
集合的差:set_difference
集合的标准差:set_symmetric_difference
集合的有序合并:merge
注意stl使用的5个参数
cf 803c
题目要求
寻找一个递增序列满足k个数和为n 使他们的gcd最大
参考AC代码
|
|
思路
假设当前的因数为d 那么可以构造出一个序列d 2d 3d···(k-1)d 他们的和用等差数列求和公式求出为s=d*k(k-1)/2
剩下的一个数为n-s 需要满足n-s>(k-1)d
因为我们求因数的时候上限开到根号n 所以需要考虑d和n/d两种情况的公差
k大于20万为计算出的数字 需要满足前k-1项小于n
cf_Igor and his way to work
题目要求
带转弯的dfs 注意开三维或思维数组 空间换时间即可
参考AC代码
|
|
cf_Mice problem
题目要求
有一个矩形范围的捕鼠夹 有若干个老鼠以x轴和y轴恒定的速度运动 问某一时间捕鼠夹里是否可以抓到所有的老鼠
参考AC代码
|
|
注意事项
高精度计算 求出严格和非严格的答案 判断误差精度是否在要求之内
cf_Presents in Bankopolis
题目要求
一条路每次来回不能越过已走过的最远的边界
类似于不断缩小范围的搜索
参考AC代码
|
|
思路
记忆化搜索+dp的状态转移方程
k=1时dp置为0
注意记忆化搜索的格式
ATcoder——01背包变形
题目要求
背包容量10^9 无法用数组保存
单件物品的消耗满足w1<=wi<=w1+3四种情况
参考AC代码
|
|
思路
贪心
vector保存四种w的物品 每种w的物品按照价值的降序排列
暴力即可 使用accumulate函数可以增加代码可读性 注意条件判断
ATcoder——Ball Coloring
题目要求
每个箱子有两个给定编号的白色气球 每次可以把箱子里的一个气球涂成红色另一个涂成蓝色
求红色气球编号的最大值-最小值×蓝色气球编号的最大值减最小值的最小值
参考AC代码
|
|
思路
stl 贪心
把每组气球中编号的小的放入multiset容器中 编号大的放进另一个
保证小-小×大-大是最优解(最小)
a数组也需要排序
确保找到并交换的第一个最小值是逐渐变大的 贪心保证全局最优解
从a数组的第一个开始(最小) 每次在容器中找到对应的值交换 更新答案