【20231029算法进阶班】NOIP训练赛#27 赛后总结
做题历程
8:00 ~ 8:40
看A做A。
8:40 ~ 9:40
看B做B。
9:40 ~ 10:40
看了看C、D,感觉C不好写暴力,先打D暴力再看看。
10:40 ~ 11:40
写C暴力。
11:40 ~ 12:00
检查。
总结
- 写代码要注意细节。
题解
A
离谱,\(n^2\) 暴力就能过。
B
构造,最长的情况就是对于每段连续大于号,都弄成第一个位置最小的情况,
最短的情况就是把大于号小于号弄成相反的,输出 \(n-ans_i+1\)。
C
设 \(f_{i,j}\) 表示上一步朝下走,走到 \((i,j)\) 下一步要向右走,方案数。
设 \(g_{i,j}\) 表示上一步朝右走,走到 \((i,j)\) 下一步要向下走,方案数。
转移显然。
可以预处理出从 \((i,j)\) 最多能朝下走和朝右走多少步。
D
链的做法显然但是写挂了。
然后考虑从 \(u\) 和 \(v\) 分别走到 \(lca\),可以照搬链的做法。
但是如果有一种线路,正好可以一步跨过 \(lca\),答案就要减 \(1\)。
我们考虑 \(U\),\(V\) 是走到最后,再走一步就到 \(lca\) 或 \(lca\) 上面的点。
有如上线路的,一定是一个点在 \(U\) 子树内,一个点在 \(V\) 子树内的线路。
考虑将使用 \(dfs\) 序,就可以将问题转化为二维数点。

浙公网安备 33010602011771号