没有合适的资源?快使用搜索试试~ 我知道了~
CSP2022总结&题解&实现代码
需积分: 1 0 下载量 192 浏览量
2024-01-25
16:32:58
上传
评论
收藏 44KB DOCX 举报
温馨提示
试读
22页
CSP2022总结&题解&实现代码
资源推荐
资源详情
资源评论
代码统一置于文末。
J
今年题目只有 T3 有一些难度。这里只写 T3。
看到这样的逻辑表达式,第一反应是转化成后缀表达式。
如样例:0&(1|0)|(1|1|1&0),化成后缀表达式就是 010|&11|1|0&|。
然后手玩了很久没有想到怎么计数。一开始想的是记录栈深,但是后
来发现更深的地方是未知的。
但是由此思路可以发现一个结论:数字栈中较浅的数一定是在较深的
数的括号内或是运算内的。
而且,栈中每个数都可以代表一个表达式。
所以可以对于每个栈中的数记录两个值: ORi 和 ANDi 。
初加入的数, ORi 和 ANDi 都为 0。其余每次运算都分类讨论一下合
并 top 和 top−1 的两个权即可。
最后的答案是全式的短路数量,也就是最终数字栈里的那个数的权
值。
时间复杂度是 Θ(|S|) 。
此题的难度在于思考。用两个权以表示表达式是重点。
算是一道质量很高的题目。
S
不仅上述的代码能力有锅,策略也有锅。
引用在洛谷上看到的一句话:
永远不要在考前确定场上策略。
说的很对。这次赛前本身就没有计划去切题,所以每道题都只盯着
task 而没有细想。
今后比赛必不能再这样,很容易导致实力被压缩。
写题吧。
T1:holiday
一道质量较高的题目。
赛时通过预处理写一个 玄学 O(玄学) 的暴力。
这个暴力本质上是枚举四个点: 1→a→b→c→d→1 。显然时间会爆。
记“出点”为一个点能到达的点集。
那么接着可以有一个不成熟的贪心策略:只走每个点的前几大出点,
比如前 5。
正确性显然堪忧。
但是这可以给予一个思路:只找前几大的点。
然后考虑只枚举 b,c 。
剩余的 a,d 的共同性质就是都能够到达 1。
此时,如果我们知道 b 的前几大的出点(并且这些出点可以到达
1), c 前几大的出点(同理),就可以拥有一个 a,d 的备选集合。
然后在这个备选集合内找到前两大的合法点作为 a,d 即可。
通过小小的分析,发现只需维护每个点前 3 大的出点(并且这些出点
都能连通 1)。
然后问题解决。
时间复杂度 O(n2) 。
T2:game
场上策略不优。
通过特殊 task: l1=r1 或 l2=r2 可以发现,这种情况下结果只可能存
在于这个单点乘以:最大的正数、最小的正数、最大的负数、最小的
负数以及如果有 0 的话就乘 0。
那么再往深处想想,一个正常数据就是很多个这种数据的合并。有一
个显然的结论可以猜测:此时的结果两侧使用值也分布在上述 5 种。
证明的话,考虑把数列 a 作为多个 l1=r1 的合并。那么数列 a 的一个
“common”负数/正数在与右侧值相乘时不可能优于上述特殊排布的
负数/正数/0。
所以用两颗线段树区间维护这 5 种值就可以了。
T3:galaxy
首先“连续穿梭”就是全部出度为 1。既然全部出度为 1,这个图一定
存在环。
所以考场的思路就是维护全部出度的 min,max 是否为 1。
对于操作 2,4 只能一个个删。所以时间复杂度最坏是 O(qnlgn) 。
考虑正解。
可以维护出度和。判断是不是 n 。虽然正确性堪忧,但是可以通过入
度将时间变为 O(q) 。
然后正确性问题出在 1+1+1=1+2+0。
所以可以赋予每一个点一个随机值。随机值如上情况的概率极小。
可以通过。时间复杂度 O(q) 。
T4:transmit
� 对于 k=1 ,树剖。
剩余21页未读,继续阅读
资源评论
smartsmile2012
- 粉丝: 863
- 资源: 83
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功