Soluție HackerRank pentru Sherlock and Pairs, subdomeniul Combinatorics, în Python 3. Include cerința formatată, exemple, explicația pașilor și cod sursă.

  • Problemă: Sherlock and Pairs
  • Domeniu: Combinatorics
  • Limbaj: Python 3

Challenge: Sherlock and Pairs

Subdomeniu: Combinatorics (combinatorics)

Scor cont: 30.0 / 30

Submission status: Accepted

Submission score: 1.0

Submission ID: 464726908

Limbaj: python3

Link challenge: https://www.hackerrank.com/challenges/sherlock-and-pairs/problem

Cerință

Sherlock is given an array of N integers (A<sub>0</sub>, A<sub>1</sub> ... A<sub>N-1</sub> by Watson. Now Watson asks Sherlock how many different pairs of indices i and j exist such that i is not equal to j but A<sub>i</sub> is equal to A<sub>j</sub>.

That is, Sherlock has to count the total number of pairs of indices (i, j) where A<sub>i</sub> = A<sub>j</sub> AND i ≠ j.

Input Format
The first line contains T, the number of test cases. T test cases follow.
Each test case consists of two lines; the first line contains an integer N, the size of array, while the next line contains N space separated integers.

Output Format
For each test case, print the required answer on a different line.

Constraints
1 ≤ T ≤ 10
1 ≤ N ≤ 10<sup>5</sup>
1 ≤ A[i] ≤ 10<sup>6</sup>

Sample input

2
3
1 2 3
3
1 1 2

Sample output

0
2

Explanation
In the first test case, no two pair of indices exist which satisfy the given condition.
In the second test case as _A[0] = A[1] = 1_, the pairs of indices _(0,1)_ and _(1,0)_ satisfy the given condition.

Cod sursă

#!/bin/python3

import math
import os
import random
import re
import sys

def solve(a):
    # Write your code here
    a_dic = {}
    pairs = 0
    #loop to count the number of elements
    for i in range(len(a)):
        if a[i] not in a_dic:
            a_dic[a[i]] = 0 #{a[i]:0}
        a_dic[a[i]] += 1 #{a[i]:+1} add one
    #loop for check whats integers taht are more than once
    for k in a_dic:
        val = a_dic[k]
        if val > 1: #condition more than once
            pairs += val * (val-1)  #possible pairs n*(n-1)
    return pairs
if __name__ == '__main__':
    fptr = open(os.environ['OUTPUT_PATH'], 'w')

    t = int(input().strip())

    for t_itr in range(t):
        a_count = int(input().strip())

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

        result = solve(a)

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

    fptr.close()
HackerRank Combinatorics – Sherlock and Pairs