You've successfully subscribed to The Poor Coder | Hackerrank Solutions
Great! Next, complete checkout for full access to The Poor Coder | Hackerrank Solutions
Welcome back! You've successfully signed in.
Success! Your account is fully activated, you now have access to all content.
Count Triplets Solution in C++

Count Triplets Solution in C++

Beeze Aal
Beeze Aal

You are given an array and you need to find number of tripets of indices  such that the elements at those indices are in geometric progression for a given common ratio  and .

For example, . If , we have  and  at indices  and .

Function Description

Complete the countTriplets function in the editor below. It should return the number of triplets forming a geometric progression for a given  as an integer.

countTriplets has the following parameter(s):

  • arr: an array of integers
  • r: an integer, the common ratio

Input Format

The first line contains two space-separated integers  and , the size of  and the common ratio.
The next line contains  space-seperated integers .

Constraints

Output Format

Return the count of triplets that form a geometric progression.

Sample Input 0

4 2
1 2 2 4

Sample Output 0

2

Explanation 0

There are  triplets in satisfying our criteria, whose indices are  and

Sample Input 1

6 3
1 3 9 9 27 81

Sample Output 1

6

Explanation 1

The triplets satisfying are index , , , ,  and .

Sample Input 2

5 5
1 5 5 25 125

Sample Output 2

4

Explanation 2

The triplets satisfying are index , , , .

Solution in C++

#include<bits/stdc++.h>
using namespace std;

map<long long,long long> l,r;

int main()
{
	long long n, k,ans=0 ;
	scanf("%lld%lld",&n,&k);
	long long a[n];
	for(int i=0;i<n;i++)
		scanf("%lld",&a[i]);
	for(int i=0;i<n;i++)
		r[a[i]]++;
	for(int i=0;i<n;i++)
	{
		r[a[i]]--;
		if(a[i]%k==0)
		{
			ans+=l[a[i]/k]*r[a[i]*k];
		}
		l[a[i]]++;
	}
	printf("%lld\n",ans);
	return 0;
}