思路讲解
codeChef题目可以看viewsolution,就是下面这个链接
1 | inline ll diff(ll a,ll b){ |
AC代码
https://www.codechef.com/viewsolution/1165814370
1 | // Problem: Subsequence Sort |
codeChef题目可以看viewsolution,就是下面这个链接
1 | inline ll diff(ll a,ll b){ |
https://www.codechef.com/viewsolution/1165814370
1 | // Problem: Subsequence Sort |
行上面反转,使列上面为排列。
注意到,可以对称的操作,反转1,i,使得 i 为首,再反转N-i+1,N,
1 | // 第一阶段操作 |
1 | #include <iostream> |
图论建模,拓扑排序。
拓扑排序的代码(使用BFS kahn‘s算法),通过判断q的大小可以知道其是不是严格的(该题目要求严格的顺序)。
1 | ll trop(const vector<ll> &a,ll siz){ |
https://www.luogu.com.cn/record/220236107
1 | // Problem: P1347 排序 |
检查点之间共有 m 条单向通道。第 i 条通道允许从点 si 移动到点 ti(si<ti),但不允许反方向移动。此外,只有当机器人至少拥有 wi 个充电电池时,才能使用第 i 条通道;否则,它将在途中耗尽电量。
这个 si<ti 尤为关键,这说明了这张图是有向无环图(DAG)。
那么二分做法不用多说,使用天然的拓扑排序以及类似dp做法解决,然后注意斜体加粗部分。
1 | inline bool check(ll mid){ |
https://codeforces.com/contest/2110/submission/324044393
1 | // Problem: D. Fewer Batteries D. 更少的电池 |
TLE,该代码一个点被访问多次,那么其所有边都将重新遍历一次。

1 | // Problem: D. Fewer Batteries D. 更少的电池 |
这是一道关于无人机通过障碍门的问题。有 N 道门,每道门都有高度范围 [l_i, r_i]。无人机初始高度为 0,每次可以选择保持高度不变或上升 1 个单位。部分门的操作已经固定(0 表示保持不变,1 表示上升),部分门的操作待定(-1 表示可以自由选择)。需要判断是否存在合法方案使无人机能通过所有门,如果存在则输出一种方案,否则输出 -1。
虽然这种题不是不可能dp,但dp不太可能。
容易想到一种贪心,在每一道门前尽量增加高度,
但是要注意这个高度的上界是什么。
1 | // 在每一道门前尽量增加高度,但是要注意这个高度的上界是什么 |
这个上界不仅会受到后续最小 r 的影响,还会收到固定操作的影响
https://codeforces.com/contest/2110/submission/323871174
1 | // Problem: C. Racing |