【考试总结】2022-06-16
小学生物理题
设 \(f_{l,r,0/1}\) 表示从左/右边开始检查在 \([l,r]\) 中哪根导线出了故障的最小代价,设 \(S_i\) 表示 \(s_i\) 的前缀和
转移枚举下一个检查的位置:
注意到在 \(k\) 单调移动的过程中必然存在一个分界点 \(p\) 使得 \(k\le p\) 使得 \(f_{l,k,0}\le f_{k,r,1}\) 而在 \(k>p\) 时有 \(f_{k,r,1}\le f_{l,k,0}\)
固定右端点扫描左端点,在 \(p\) 移动时就是一个滑动窗口求最小值,维护两个单调队列表示 \(f_{k,r,0}+s_r+d_r,f_{k,r,0}-s_r+d_r\),另对每个左端点用一个单调队列维护的信息即可
数轴变换
对于对于每个黑色连续区间(如果有交不进行合并)用左右括号表示其开始结尾
那么查询某个位置的颜色等价于坐标 \(<\) 其的右括号是否比坐标 \(\le\) 其的左括号少
那么翻转时类似 \(\rm ODT\),将区间定位出来,也就是将数轴分成了三部分
在数轴前缀添加若干右括号,当前区间开头加入若干左括号,结尾加入若干右括号,在数轴后缀开头加入若干左括号使得这三段的每一段都是合法的括号序列,注意不需要合并连续区间
写一个可持久化非旋 \(\rm Treap\) 支持所有操作即可,坐标变换可以表示成一次函数形式,翻转是 \((l+r)-x\) 而延伸长度是左括号 \(x-d\) 右括号 \(x+d\),可以维护两个标记表示斜率和截距
中学生物理题
暴力找到所有循环,如果这条路径延伸向无穷远点就用一个虚点表示(全局一个虚点)
将每面镜子两边对应的循环连边(可能有 \(0/1/2\) 点是虚点),那么存在解当且仅当除了虚点之外的所有点度数为 \(8\) 的倍数
在这张图上跑欧拉回路,将每条边按照是在路径上经过顺序的奇偶性分开,分开后对每个联通块跑求欧拉回路得到四个部分,每个部分一种颜色即可
自环不用特殊处理,而且只会出现在虚点之上