2020CSP-S复赛杂记

本篇为伪题解,多是一些杂话。

t1:分情况模拟。函数编程,临界点常量的计算方式(尽量用算式表达,不然用一个数的话不容易检查错误),以灵活的角度看待循环节。

t2:数据范围小于等于2^64,可用unsigned long long 位运算。但注意unsigned long long 表示范围不包括2^64,故要有特殊情况的处理。(虽然考试里的处理还是挂了,没想到n可以等于0)

t3:树形的倒序是线形,没想到倒序处理;建立模型,描述好操作;

要点:先想到倒序处理为线性。对每个函数——即调用树中的节点 处理不能都dfs一次,考虑打标记,打标记的核心之一即为建立一个能描述统一、充分的模型,且标记可以下传。最后自然能想到用拓补序(即将森林从上往下一个个点扒掉)下传标记得真值(这一步反而最简单)。

本题口胡:

  **建立数组f,表示1操作或3操作的“贡献倍数”,即这个操作有多少倍贡献(贡献可以是单点加(1操作),也可是多点加(3操作)(因为在调用序列调用时只O(1)打下标记,只最后拓扑序更新答案,所以时间复杂度仍是O(N)量级))。

  读入数据建立调用关系的森林,dfs一遍求出每个节点调用后会使维护的数列整体乘几倍。再对最后的调用序列倒序处理,得出每个函数直接调用的贡献f,然后按拓扑序(保证在树处理时从上到下处理&&因为可能调用关系组成森林,故不止一个根节点)更新出每个底层加函数的贡献(底层乘函数的贡献已经算在最后的mul里了),接下来处理一下最后的贡献就好了。
大佬题解

t4:“足够聪明”:保证自己在有选择机会的时候一定会选择能使自己有最好的最终结果。这里蛇有退出决斗的选择,那么他若有的选,则一定不会死;对线性数据结构的灵活应用,在本题是把时间复杂度的log优化掉的核心。

大佬题解

顺便发现科学计数法的数的类型一般是double(不能用作数组下标,能重载的大佬请任意

再加上个别人总结比较到位的CSP 2020 二轮爆零分析

posted @ 2020-11-22 10:43  千叶繁华  阅读(213)  评论(0)    收藏  举报