CSP 模拟14


都爆炸成这个样子了 老姚还在奶
奶 油 小 生 老 姚
这次考试的确考的太差了
T1 T2 都不难 但是一道也没做出来 考试的时候想到正解不敢打 要么就是打不出来 到底还是思路不够清楚 码力也不够

A:虎

还是贪心 构造
定义
一开始是白边 要求为黑边的边权为1
没有要求的边权为-1
其它都是0

最优化的构造显然是1和1匹配
先考虑70pts
所有边边权要么是1 要么是0
对于一个点的儿子 如果是偶数自己匹配 如果是奇数就往上传
这个和之前的构造很像 做过几次这样的题了
但是如果上传的时候 发现上面那条边边权是0 那就把这个也自己匹配掉
因为哪怕传上去 最终还要把边权0的边再改回黑边 不会更优
扩展到100pts
-1也是可以满足上传的 类似于1的情况 处理一下就好了





B: 陶陶摘苹果

考试的时候想到100pts代码了
但是没敢去写 总觉得自己不是正解
首先处理dp数组
表示从每个点开始 到最后的位置
单调递增选可以选多少个数
单调栈搞一下就可以了
然后考虑怎么处理修改
每次修改就去pos + 1一直到最后的位置里 找到第一个比此时最大值大的数 然后加上其dp值 就好了
实现方法是树套二分 \(log^2\)
在pos + 1 到 n的位置里查找答案
然后每次判断左儿子中最大值是否大于当前要查找的val
如果是 递归左儿子
如果左儿子不满足
判断右儿子中最大值是否大于当前要查找的val
如果是 递归右儿子
不是 直接返回0就好了

最大值直接用线段树维护就行了

或者分块写 跟线段树差不多 随便写写 记得判一下边界 不然数组会越界

正解是线段树维护单调栈 板子题 但是之前没学过




C:开心的金明

贪心
开set记录一下每个月电脑的价值和代价
用set维护结构体,表示电脑的价格和数量,每次都买最便宜的,如果超过e限制,就每次删最贵的,




D:笨小猴

之前做过的
正解是贪心
按关键字a升序排序 每次选择两个数中b较大那个
因为最后一个我们会选择一个最大的a
所以我们可以扔掉第一个a不看 再次去配对
容易发现每一对中a大的 b也大了
所以是合法的

但是考试的时候是直接模拟的
按a排序 把前n+1个全部选上
然后按b排序 每次选最大的b 并把最小的a扔掉
这样构造出一组解

posted @ 2020-10-12 09:35  HISKrrr  阅读(92)  评论(0编辑  收藏  举报