0%

CF-1026-C. Racing (让无人机上升还是保持不变以通过障碍)

思路讲解

题目总结

这是一道关于无人机通过障碍门的问题。有 N 道门,每道门都有高度范围 [l_i, r_i]。无人机初始高度为 0,每次可以选择保持高度不变或上升 1 个单位。部分门的操作已经固定(0 表示保持不变,1 表示上升),部分门的操作待定(-1 表示可以自由选择)。需要判断是否存在合法方案使无人机能通过所有门,如果存在则输出一种方案,否则输出 -1。

虽然这种题不是不可能dp,但dp不太可能。

容易想到一种贪心,在每一道门前尽量增加高度,

但是要注意这个高度的上界是什么。

1
2
3
4
5
6
7
8
9
10
11
12
// 在每一道门前尽量增加高度,但是要注意这个高度的上界是什么
ROF(i,N,1){
ll r=lr[i][1];
if(D[i]==1){
// 这里-1是因为这里当然不会判断,但是当mnR[i-1]来读这个mnR[i]的时候
// 我们希望mnR[i-1]的上界不能是mnR[i],因为+1就超了
// 连续操作与传递同理
mnR[i]=min(r-1,mnR[i+1]-1);
}else{
mnR[i]=min(r,mnR[i+1]);
}
}

这个上界不仅会受到后续最小 r 的影响,还会收到固定操作的影响

AC代码

https://codeforces.com/contest/2110/submission/323871174

心路历程(WA,TLE,MLE……)