C - Peakときかた
自分はこんな感じでやりました
初心者なので悪しからず
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,m;cin>>n>>m;
vector<int>a(n);
for(int i=0;i<n;i++){
cin>>a[i];
}
sort(a.begin(),a.end());
int ans=0;
for(int i=0,j=0;i<n;i++){
while(j<n and a[j]-a[i]<m){
j++;
}
ans=max(ans,j-i);
}
cout<<ans<<endl;
return 0;
}
一つずつ説明していきます
int main(){
int n,m;cin>>n>>m;
vector<int>a(n);
for(int i=0;i<n;i++){
cin>>a[i];
}ここについては理解してくだせい
そのあとはソート君を使います
そうすることでこの後することがやりやすくなり
あと順序になるので気分がいいです
for(int i=0,j=0;i<n;i++){
while(j<n and a[j]-a[i]<m){
j++;
}
これはまず iを使って範囲の基準を作ります
そこからjをつかってa[i]とa[j]の差がm以下の際に
j++していきjの最大値をmaxで求め
最後に表示するだけです
maxの際にj-iをなぜするかはそれをしないと
基準がiなのでそれを引かないとmの範囲じゃなくなってすべてn-1の表示になっちゃうからや!
初心者なので説明へんだったら教えてください
ACだったのでコードは間違ってないと思うんでそこは大丈夫です
眠いんで寝まーす