noip 以后 CF 题选录
contests
Educational Codeforces Round 117
D. X-Magic Pair
发现能够凑出的数都是这样形成的:
比如 \(a>b\),那么一直让 \(a\) 减 \(b\),如果 \(a 那么交换
然后模拟 \(gcd\) 的过程即可,即求 \(gcd\) 的过程 \(x\%b==a\%b\) 则满足条件
E. Messages
利用期望的线性性,那么总期望等于各信的期望之和
假如目前选择 \(t\) 封信,那么对于一个信的主人 \(i\),如果 \(k_i\ge t\),那么获得 \(1\) 的期望,否则获得 \(k_i/t\) 的期望
考虑 \(t\) 的范围,结论是 \(t\le max\{k_i\}\)
证明:假设 \(t\) 取 \(21\) 的最有情况,即前 \(21\) 大的信都有 \(x\) 个人,每个人的 \(k\) 都是 \(20\),那么减少的为 \(\frac{1}{21}F* 20x\),增加的是 \(\frac{20}{21}Fx\),发现最有情况正好相等,那么意味着 \(t\) 变成更大一定不优
F. Armor and Weapons
首先暴力的想法是直接 \(bfs\) 二元组 \((a,b)\)
然而一个很好的条件是特殊点对的加成为 \(1\),那么发现 \(x\) 或 \(y\) 越大一定越优
可以按照层数来 \(dfs\),那么对于每层来说如果存在点对 \((x,y)\) 和 \((x',y')\),满足 \(x\ge x',y\ge y'\),那么 \((x',y')\) 可以说是没有用的了
那么这样每层的状态实际上非常少,最多 \(m\) 个,而 \(bfs\) 到答案最多大约 \(log\) 层,那么复杂度 \(mlogn\)
这道题启示我们进行类最短路 \(bfs\) 时要尽量地对状态进行优化与剪枝
G. Max Sum Array
首先是这样一个结论:一开始两端点一个定放个数最多的那种数,证明省略
那么就出现了可以递归的子问题,然后递归处理即可
发现出现不同方案数可能由于每一层同时有多个个数最多的数,假设有 \(k\) 个
通过同样的方式可以证明摆放顺序没有关系,那么有 \((k!)^2\) 种方案
利用桶排 \(O(m)\) 处理即可
Codeforces Round 709
C. Skyline Photo
写出来 \(dp\) 方程:\(f[i]=max\{f[j]+b_{min\{a_i\}}\}\)
发现转移是成段的,即每个 \(i\) 管理一段
那么可以直接用单调栈来解决这个问题,每个单调栈里记录栈中这个元素到上一个元素之间的最优转移即可
D. Useful Edges
首先是暴力的想法,枚举每一条边,枚举每一个三元组,如果满足 \(dis[u][x]+w(x,y)+dis[y][v]\le l\) 则满足条件
移项得 \(dis[u][x]+w(x,y)\le l- dis[y][v]\)
两边都有的是 \(u,y\),那么对于固定的 \(u,y\),枚举一边更新另一边即可
杂题
数据结构
CF1136E Nastya Hasn't Written a Legend
我也不知道正解是怎么想到这道题中的不变量的……
发现 \(a_i\ge a_{i-1}+k_{i-1}\ge …… \ge a_1+sum_{i-1}\)
那么设 \(u_i=a_i-sum{i-1}\)
那么带入得到 \(u_i\ge u_{i-1}\),即是单调的
操作一相当于单点加,配合线段树上二分与区间覆盖来维护单调新
操作二相当于区间和,减去前缀和的前缀和
注意可能区间赋值为零,\(lazy\) 标记要初始化为 \(-inf\)