In this HackerEarth Pairs Having Similar Elements problem solution, we have given an array, A, having N integers A1,A2,...,An.Two elements of the array Ai and Aj are called similar if Ai = Aj + 1 or Aj = Ai + 1.


Hackerearth Pairs Having Similar Elements problem solution


Hackerearth Pairs Having Similar Elements problem solution.

#include <bits/stdc++.h>
using namespace std;
#define ll long long
int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);
        int n;
        cin>>n;
        int* a= new int[n];
        for(int i=0;i<n;i++)
            cin>>a[i];
        sort(a,a+n);
        ll ans=0;
        ll ct=1,ctdis=1;
        for(int i=1;i<n;i++){
            if(a[i]==a[i-1]){
                ct++;
            }
            else if(a[i]==(a[i-1]+1)){
                ct++;
                ctdis++;
            }
            else{
                if(ct>=2&&(ctdis>=2)){
                    ans+=(((ct)*(ct-1))/2);
                }
                ct=1;
                ctdis=1;
            }
        }
        if(ct>=2&&(ctdis>=2)){
            ans+=(((ct)*(ct-1))/2);
        }
        cout<<ans<<endl;

    return 0;
}

Second solution

#include<bits/stdc++.h>
using namespace std;
#define   pb              push_back
#define   REP(i,n)        for(i=1;i<=n;i++)
#define   FOR(i,a,b)      for(i=a;i<=b;i++)
#define   all(v)          v.begin(),v.end()
#define   F               first
#define   S               second
#define   vl              vector<LL>
#define   itr             ::iterator it
#define   lb              lower_bound
#define   ub              upper_bound
#define   LL              long long
#define   ULL             unsigned long long
#define   ret             return 
LL n,i,j,ans = 0;
LL a[10000000] ;
void f(LL x)
{  
   ans += (x * (x-1))/2 ; 
} 
int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cin>>n ; 
    assert(n>=1 and n<=1000000) ; 
    REP(i,n) 
    { cin>>a[i] ;
      assert(a[i]>=-1000000000 and a[i]<=1000000000) ; 
    }
    sort(a+1,a+1+n) ;
    
    LL x = 0 ; 
    for(i=1;i<=n;i++)
    {  LL k = 0,l = 0   ; 
       for(j=i+1;j<=n;j++)
       {  k = max(k,a[j]-a[j-1]) ;
          if(k==1) l++ ;  
          if(k>1) break ; 
       } 
       if(l)
        f(j-i) ;
       i = j - 1 ;  
    }
    cout<<ans<<endl ; 

}