CSP 2020 游记

Mitama

2020-11-08 23:03:48

Personal

# J/S 1 因为是打完第二轮补的,凭印象写点东西吧。 什么都不会,上午 S 组阅读程序 C 题没想到插值,没时间了蒙一个 $84$ 滚了(悲) 下午 J 组抱着稳过的心态凭感觉答,结果分比提高还低(LN 线是真水啊((( # J/S 2 ## Day 0 赶去金州,姑姑家在那边,顺便给妈妈烧个头七。本来想翘掉 J 去烧纸的,但是爸爸让我去 J((( 虽然就是市区到市区外,没多远,但是也提前一天去比较舒服吧() 本来想晚上洗个澡来着,但是姑姑着急,就没洗上。 在车上写了个最小生成树,SPFA 没写完()果然码力退化得这么厉害嘛((( ## Day 1 ### J 带了瓶蜜桃乌龙茶,穿着校服,就去了。 A 二进制拆分一波,结果加上初始化 Linux 用了半个小时(悲) B 没想到桶,用的对顶堆切了() C 感觉是树上标记,利用与和或运算符特性,标记每个节点值的改变是否影响根节点的值,感觉很烦,看 D。 感觉 D 也不能 1min 切,滚去码 C,码码码,100+L 过了大样例,就没管。 C 的话对于树上每个节点,维护几个值: $inf_i$ 表示节点 $i$ 权值的改变是否对根节点权值有影响;$n_i$ 表示如果有影响的话,该影响是否相反(即点权与根节点点权是否相反);$type_i$ 表示节点 $i$ 的运算种类。 - 如果是与运算,一棵子树是 $1$,另一棵子树 $inf$ 为真,搜索; - 如果是或运算,一棵子树是 $0$,另一棵子树 $inf$ 为真,搜索。 D 先把原图转一下,看着特别难受() 先想了个 $n^3$ DP(默认 $n, m$ 同阶): 设 $f_{i, j}$ 为走到 $(i, j)$ 的最大权值和,$g_{i, j, k} = \sum_{o = j}^k a_{i, o}$,则 $$ f_{i, j} = \begin{cases} g_{1, 1, j} & i = 1\\ \max_{k}(f_{i - 1, k} + g_{i, j, k}) & i > 1 \end {cases} $$ 考虑当 $j$ 移动时,$f_{i - 1, k} + g_{i, j, k}$ 的变化在 $j$ 的前后是区间加 / 区间减形式的,可以用线段树维护。 还剩 30min。去年这时候还剩 60min。果然还是变菜了啊(悲) ~~不得不说 Emacs 的游戏真好玩(雾)~~ 期望得分:100 + 100 + 100 + 100 = 400。 ### S 中午睡了一觉,头昏脑胀。 A 出大模拟,爬(全恼) 写了 1h+,调来调去,过了全部样例,造了一下删掉那几天附近的边界觉得特别稳。 B 读了 10min 题,发现特别 ~~SB~~ 简单。 切了,觉得不稳,打了个快读。过了全部样例。 并没有特判 $2^{64}$。 本来打了 `1ull` 的,但是经过一番重构后,就没了(悲) C 假了。 我一开始想的是,把一会加一会乘转化为 $\sum \prod$ 的形式,就是对积求和。 1 和 2 操作很好处理。3 的话如果只执行 1 和 2 的话也可以 $O(c)$ 转化为一个 2 和一堆 1。 然后对于每个 3 求一下这个操作后面的乘积的和 $\sum \prod$,然后计算贡献。 最后求 1 和 2 的贡献。 写了 40min,忘记 3 套 3 了。现在还没和人讨论正解,但感觉这个做法离正解不远(雾) 还是看看 D 罢。 啊这 70pts 不就是支持单点修改和删除的数据结构嘛() 想上带删除标记的线段树,想了一会没想到更方便的解法,写了 40min,过掉了大样例。 还剩 15min,C 的暴力没打完。 - expected:100 + 100 + 0 + 70 = 270。 - oitiku:80 + 65 + 0 + 70 = 215。 - luogu:40 + 60 + 0 + 70 = 170。 - nowcoder:0 + 0 + 0 + 0 = 0(CE,Clang++11 不支持 `register` 修饰 `typedef` 后的东西(悲) 省一应该差不多,NOIP 翻一波罢。 # 其他 有时间更到 github 博客上去。