# HackerRank Triple sum interview preparation kit problem solution

In this HackerRank Triple sum interview preparation kit problem You are Given 3 arrays a,b,c of different sizes, find the number of distinct triplets (p,q,r) where p is an element of a, written as p E a, q E b, and r E c, satisfying the criteria: p <= q and q => r.

## Problem solution in Python programming.

```#!/bin/python3

import math
import os
import random
import re
import sys

# Complete the triplets function below.
def triplets(a, b, c):
a = list(sorted(set(a)))
b = list(sorted(set(b)))
c = list(sorted(set(c)))

ai = 0
bi = 0
ci = 0

ans = 0

while bi < len(b):
while ai < len(a) and a[ai] <= b[bi]:
ai += 1

while ci < len(c) and c[ci] <= b[bi]:
ci += 1

ans += ai * ci
bi += 1

return ans

if __name__ == '__main__':
fptr = open(os.environ['OUTPUT_PATH'], 'w')

lenaLenbLenc = input().split()

lena = int(lenaLenbLenc[0])

lenb = int(lenaLenbLenc[1])

lenc = int(lenaLenbLenc[2])

arra = list(map(int, input().rstrip().split()))

arrb = list(map(int, input().rstrip().split()))

arrc = list(map(int, input().rstrip().split()))

ans = triplets(arra, arrb, arrc)

fptr.write(str(ans) + '\n')

fptr.close()```

## Problem solution in Java Programming.

```import java.io.*;
import java.math.*;
import java.security.*;
import java.text.*;
import java.util.*;
import java.util.concurrent.*;
import java.util.regex.*;

public class Solution {

// Complete the triplets function below.
static long triplets(int[] a, int[] b, int[] c) {
int[] ar = Arrays.stream(a).sorted().distinct().toArray();
int[] br = Arrays.stream(b).sorted().distinct().toArray();
int[] cr = Arrays.stream(c).sorted().distinct().toArray();

long left = 0;
long right = 0;
int l = 0;
int r = 0;
long sum = 0;

for(int i=0; i<br.length; i++) {
while(l<ar.length&&ar[l]<=br[i]) {
left++;
l++;
}
while(r<cr.length&&cr[r]<=br[i]) {
right++;
r++;
}
sum += left*right;
}
return sum;
}

private static final Scanner scanner = new Scanner(System.in);

public static void main(String[] args) throws IOException {
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(System.getenv("OUTPUT_PATH")));

String[] lenaLenbLenc = scanner.nextLine().split(" ");

int lena = Integer.parseInt(lenaLenbLenc[0]);

int lenb = Integer.parseInt(lenaLenbLenc[1]);

int lenc = Integer.parseInt(lenaLenbLenc[2]);

int[] arra = new int[lena];

String[] arraItems = scanner.nextLine().split(" ");
scanner.skip("(\r\n|[\n\r\u2028\u2029\u0085])?");

for (int i = 0; i < lena; i++) {
int arraItem = Integer.parseInt(arraItems[i]);
arra[i] = arraItem;
}

int[] arrb = new int[lenb];

String[] arrbItems = scanner.nextLine().split(" ");
scanner.skip("(\r\n|[\n\r\u2028\u2029\u0085])?");

for (int i = 0; i < lenb; i++) {
int arrbItem = Integer.parseInt(arrbItems[i]);
arrb[i] = arrbItem;
}

int[] arrc = new int[lenc];

String[] arrcItems = scanner.nextLine().split(" ");
scanner.skip("(\r\n|[\n\r\u2028\u2029\u0085])?");

for (int i = 0; i < lenc; i++) {
int arrcItem = Integer.parseInt(arrcItems[i]);
arrc[i] = arrcItem;
}

long ans = triplets(arra, arrb, arrc);

bufferedWriter.write(String.valueOf(ans));
bufferedWriter.newLine();

bufferedWriter.close();

scanner.close();
}
}```

### Problem solution in C++ programming.

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

int main()
{
int p,q,r,i,x,y;
cin>>p>>q>>r;

int a[p],b[q],c[r];
for(i=0;i<p;++i) {
cin>>a[i];
}
for(i=0;i<q;++i) {
cin>>b[i];
}
for(i=0;i<r;++i) {
cin>>c[i];
}
sort(a,a+p);
sort(b,b+q);
sort(c,c+r);

long distinct_a[p],distinct_b[q],distinct_c[r];
set<int> s;
for(i=0;i<p;++i) {
s.insert(a[i]);
distinct_a[i]=s.size();
}
s.clear();
for(i=0;i<q;++i) {
s.insert(b[i]);
distinct_b[i]=s.size();
}
s.clear();
for(i=0;i<r;++i) {
s.insert(c[i]);
distinct_c[i]=s.size();
}

long ans=0;

x = upper_bound(a,a+p,b[0])-a;
y = upper_bound(c,c+r,b[0])-c;

x-=1,y-=1;
if(x>=0 && y>=0) {
ans += distinct_a[x]*distinct_c[y];
}

for(i=1;i<q;++i) {
if(b[i]!=b[i-1]) {
x = upper_bound(a,a+p,b[i])-a;
y = upper_bound(c,c+r,b[i])-c;

x-=1,y-=1;
if(x>=0 && y>=0) {
ans += distinct_a[x]*distinct_c[y];
}
}
}
cout<<ans<<endl;

return 0;
}
```