cf杂选2
817 A
题目要求
给出初始坐标和目标坐标
并给出(x,y)每次可以在初始坐标上执行(x,y),(x,-y),(-x,y),(-x,-y)
参考AC代码
|
|
思路
若x1-x2不能被x整除或y1-y2不能被y整除 均NO
整除做减法后奇数输出NO 偶数输出YES
偶数可以开会”跳”到结果
817 B
题目要求
输出最小值三元组的个数
参考AC代码
|
|
思路
计算出a[3]的个数 组合数
817 C
题目要求
求出满足该数x-sum(各位相加只和)>=s的个数
参考AC代码
|
|
思路
由于随着数字每增加10 x-sum会增加9 满足递增有序 所以二分答案即可
找到最小的满足条件的数字 n-ans+1就是答案
注意边界即可 可能ans比n大 此时res=0
并且可能ans=0表示没有找到 此时res=0
817 D
题目要求
求出一个数组内所有子序列的最大值-最小值的和
参考AC代码
|
|
思路
首先更新出每个作为最大值向左和向右最多能走多远 记为l和r
接着把每个数字取反再带入solve函数求出的就是作为最小值左右能走多远
枚举每个区间长度相加就是答案 相当于最大值的和减去最小值的和
round419_B
题目要求
先给出区间的覆盖情况
每次询问区间内至少被覆盖k次的整数个数
参考AC代码
|
|
思路
预处理presum+树状数组
跟处理覆盖k次区间的总长度略有不同
并不能只预处理所有的端点 因为本题的询问会针对区间内的所有整数
所以正解为:对于每次区间a[l]++ a[r+1]–(加1解决端点重叠问题)
预处理sum前缀和后即可求出每个数字被覆盖的次数 hash思想
遍历一遍 对于大于等于k的数字置为1 其余置为0 接着带入树状数组求出区间和即可
就是本题要求的满足的覆盖点数
round419_C
题目要求
初始矩阵为0 给出目标矩阵 每次可以对每一列或每一行+1 问最少需要多少次操作可以变成目标矩阵
达不到输出-1 不需要操作输出0
参考AC代码
|
|
思路
预处理出每行和每列的最小值 求出最小值的同时 对这一行或这一列的元素全部减去最小值
sum加上最小值 就是最后需要操作的次数
由于需要最小的操作次数 所以先处理行和列中的较小者 即可满足要求
如果预处理完的矩阵还有元素不为0 输出-1
否则for输出row和col即可
815 C
题目要求
超市里有n种商品,第i件物品价格为ci,除了第一件物品以外,每个物品都有优惠劵,可以优惠di,但是第i件物品能使用优惠劵的前提是第xi (1 <= xi < i) 件物品已经用优惠券买过。每件物品只能买一次,问在不超过预算b的情况下,最多能买多少件不同的物品。
参考AC代码
|
|
思路
依赖型01背包问题
可以转换成树形dp
dp[now][x][1]表示,在now节点,买x个,并且now可以使用优惠券的最小花费
dp[now][x][0]表示,在now节点,买x个,并且now不可以使用优惠券的最小花费
背包逆序
最后逆序遍历n到1求出第一个满足小于b的的数量就是最大解
817 E
题目要求
每次添加或者删除一个人 权值为p
每次询问一个人 权值为p和l 对于前面所有的人若p和该人的p xor后小于l count++ 输出最后的count值
参考AC代码
|
|
思路
xor相关 可以想到二叉字典树 即01字典树