代码可读性比较低,可以说一下这题有什么坑,我再看看有没有注意到qwq。
#include<iostream>
#include<algorithm>
using namespace std;
#define int long long
const int inf=1000000000000000001;
int n,m,a[200005],ans,rans;
signed main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i];
}
if(n<=2){
cout<<n*m;
return 0;
}
sort(a+1,a+n+1);
a[0]=-m; a[n+1]=a[n]+m;
for(int i=1;i<=n;i++){
ans+=max((long long)0,min(a[i+1]-1,a[i]+m-1)-max(a[i-1]+m,a[i])+1);
}
for(int i=1;i<=n;i++){
int s1=0,s2=0;
s1=max((long long)0,min(a[i+1]-1,a[i]+m-1)-max(a[i-1]+m,a[i])+1);
if(i==1) s2=max((long long)0,min(a[i+2]-1,a[i]+m-1)-a[i+1]+1);
else if(i==n) s2=max((long long)0,a[i-1]-max(a[i-2]+m,a[i-1])+1);
else{
int l2,r2;
if(a[i-1]+m-1<a[i]) l2=0;
else l2=max((long long)0,min(a[i-1]+m-1,a[i+1]-1)-max(a[i],a[i-2]+m)+1);
if(a[i]+m-1<a[i+1]) r2=0;
else r2=max((long long)0,min(a[i]+m-1,a[i+2]-1)-max(a[i-1]+m,a[i+1])+1);
s2=l2+r2;
}
if(ans+m+s2-s1>rans) rans=ans+m+s2-s1;
}
cout<<rans;
return 0;
}