P3984高兴的津津

这道题的标签是并查集,但其实是一个并查集思想的模拟题。

被算法标签迷惑了,一直在想怎么存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;
}
待到oi十一月,我花开后百花杀。
原文地址:https://www.cnblogs.com/china-mjr/p/11242059.html