>Link
luogu P7412
>Description
>解题思路
首先肯定要从大到小排个序
我们把每个祖先所在的年份的前后两个牛年处理出来,放进另一个数组里,每一对对应的牛年之间是肯定不能穿越的,需要耗费年份。有一个处理,如果有两对牛年首尾相连,就把他们合并成一对,因为他们之间也是肯定不用穿越的。
最后我们还要把现在的牛年0放在后面
对于不是一对的前后两个牛年,它们之间要么穿越,要么花费前面-后面的年份,所以我们把所有这种情况排个序,取最大的 k − 1 k-1 k−1个穿越(还有一次机会是从0穿越到最久之前的牛年),剩下花费的年份就全部加上就好了
>代码
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define N 200000
#define LL long long
using namespace std;
int n, k, m, tot;
LL a[N]