Codeforces Round #637 (Div.2)
A. Nastya and Rice
Solution
只要 $[n(a-b),n(a+b)]$ 和 $[c-d,c+d]$ 有交即可。
Code
1 |
|
B. Nastya and Door
Solution
前缀和预处理,枚举左端点。
Code
1 |
|
C. Nastya and Strange Generator
Solution
容易发现这个生成器生成的数字一定可以分成多段,每一段都是连续的数字。
Code
1 |
|
D. Nastya and Scoreboard
Solution
容易想到的一个 $dp$ 是:$dp[i][j]$ 表示前 $i$ 个数点亮了 $j$ 根管子的最大数值,但是这样做的话,$dp$ 数组需要开成字符串类型,而字符串的比较是 $O(n)$ 的,会 $TLE$.
正解是结合一下贪心和 $dp$:设 $dp[i][j]$ 表示从后往前的 $i$ 个数能否在点亮 $j$ 根管子后形成数字,这样 $dp$ 就是 $O(n^2)$ 的。至于从后往前,那是因为我们接下来就可以从前往后贪心地求出答案了。
Code
1 |
|
E. Nastya and Unexpected Guest
Solution
【参考官方题解】我们把“在模 $g$ 余 $j$ 的时刻到达第 $i$ 个安全岛”看做一个状态,那么不同状态之间就可以连上不同边权的边(边权即花费的时间),最短路就是答案。但是这样做复杂度太高。
重新定义边权为:到达当前状态经过的“绿灯-红灯”轮数。那么边权只是 $0$ 或者 $1$,要求得最短路,我们只需要进行 $01bfs$,即使用双端队列代替 dijkstra 的优先队列,边权是 $0$ 就从前插入,边权是 $1$ 就从后插入,仍然维护了队列的单调性,且复杂度降低到 $O(n)$.
Code
1 |
|
F. Nastya and Time Machine
Solution
参考博客:链接
Code
1 |
|
Codeforces Round #637 (Div.2)
http://xyfjason.github.io/blog-xcpc/2020/04/24/Codeforces-Round-637-Div-2/