# PBinfo #4759 – X3 – Rezolvare C++

Sursa: Codul lui Andrei
Limbaj: C++
Autor rezolvare: Darius

## Enunț

Se dă un șir de n numere naturale. Definim prietenia dintre două elemente x și y din șir ca fiind x^y, unde ^ este operatorul pe biți xor - sau exclusiv.

Cerința
Se consideră toate perechile de numere din șir, se calculează pentru fiecare prietenia, apoi se determină suma tuturor prieteniilor. Să se determine această sumă totală.

Date de intrare
Fișierul de intrare x3.in conține pe prima linie numărul n, iar pe următoarele n linii se află câte un număr natural reprezentând un număr din șir.

Date de ieșire
Fișierul de ieșire x3.out va conține pe prima linie un singur număr natural reprezentând suma tuturor prieteniilor.

Restricții și precizări

2 ≤ n ≤ 1.000.000
numerele din șir sunt naturale și mai mici sau egale cu 1.000.000

Exemplul 1:
x3.in

2
19
10 
x3.out

25
Exemplul 2:
x3.in

3
7
3
5
x3.out

12
Explicație
Șirul este 7,3,5. Prietenia dintre 7 și 3 este 4, dintre 7 și 5 este 2 și prietenia dintre 3 și 5 este 6. Suma totală este deci 4 + 2 + 6 = 12.

Exemplul 3:
x3.in

5
9
13
1
9
6
x3.out

84

## Cod sursă C++

```cpp
#include <bits/stdc++.h>
using namespace std;
ifstream fin("x3.in");
ofstream fout("x3.out");
typedef long long llint;
const int K = 20;
int c[K];
int main()
{
    int n, x;
    fin >> n;
    for( int i = 0; i < n; ++i )
    {
        fin >> x;
        for(int j = 0; j < K; ++j)
            if( x&(1<<j) )
                c[j]++;
    }
    llint ans = 0;
    for( int i = 0; i < K; ++i )
        ans += llint( c[i] )*( n-c[i] )*(1<<i);
    fout << ans << "\n";
    return 0;
}
```

## Resurse

- [Pagina originală](https://codulluiandrei.ro/rezolvari/pbinfo/4759)
- [Sursa C++](https://codulluiandrei.ro/rezolvari/pbinfo/4759/cod.cpp)
- [Sursa pe GitHub](https://raw.githubusercontent.com/codulluiandrei/pbinfo/main/pbinfo-4759/main.cpp)
- [Cursuri de informatică pentru BAC](https://codulluiandrei.ro/academia/info-curs/pachet-cpp/)
