这道题的标签是并查集,但其实是一个并查集思想的模拟题。
被算法标签迷惑了,一直在想怎么存f[],然后怎么查找,但发现其实很难去做。然后就发现其实就是做一个选择就可以了:拿AU的第i次包含在i-1次里,加上间隔时间,不包含的便直接+t。所以要提前把a[1]
输进去。值得注意的是:这个循环计算的是i-1-->i的时间,最后in的时间还是没有被算进去,所以还要加上t;
1.杜绝看算法标签,赛场上没有标签.
2.谨记一定不要下意识把样例的数据代入到代码当中(比如t==5带到所有代码里了)
3.明确循环里的求解意义
4.尽量不从题解中获取提示
代码
#include<iostream> #include<cstdio> #include<cmath> #define N 1000001 using namespace std; int n,t; int a[N]; int ans=0; int main(){ cin>>n>>t; cin>>a[1]; for(int i=2;i<=n;i++){ cin>>a[i]; if(a[i-1]+t>=a[i]){ ans+=a[i]-a[i-1]; } else{ ans+=t; } } cout<<ans+t; return 0; }