# PBinfo #4473 – excel – Rezolvare C++

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

## Enunț

Se consideră șirul v, care conține n elemente.

Cerința
Scrieți un program care să determine în câte moduri se pot selecta patru numere din șir, de pe poziții diferite, ale căror sumă este egală cu s.

Date de intrare
Fișierul de intrare excel.in conține pe prima linie numerele n și s. Pe a doua linie se află n numere întregi, elemente ale șirului v.

Date de ieșire
Fișierul de ieșire excel.out va conține un număr natural reprezentând numărul de modalități în care se pot selecta câte patru numere astfel încât suma acestora să fie egală cu s.

Restricții și precizări

1 ≤ n ≤ 1.000;
-100000 ≤ v[i] ≤ 100000;
-100000 ≤ s ≤ 100000;

Exemplul 1
excel.in

8 28
7 2 5 1 8 6 13 4
excel.out

4
Explicație
Numerele se pot grupa astfel: 

7 2 6 13
2 5 8 13
5 6 13 4
1 8 6 13
Exemplul 2
excel.in

9 23
4 -6 11 7 5 14 18 20 21
excel.out

3
Explicație
Numerele se pot grupa astfel: 

4 -6 11 14
4 -6 7 18
4 -6 5 20
Exemplul 3
excel.in

13 -20
-46 -33 -28 -23 -22 -5 1 3 4 5 10 15 21
excel.out

12
Explicație
Numerele se pot grupa astfel: 

-46 -5 10 21
-46 1 4 21
-46 1 10 15
-33 -23 15 21
-33 -5 3 15
-28 -23 10 21
-28 -5 3 10
-28 1 3 4
-23 -22 4 21
-23 -22 10 15
-23 -5 3 5
-22 -5 3 4

## Cod sursă C++

```cpp
    #include <fstream>
    #include <iostream>
    #include <vector>
    using namespace std;
    ifstream fin("excel.in");
    ofstream fout("excel.out");
    const int NMAX = 200001;
    int fr[2 * NMAX];
    int n, s, x;
    vector<int> v;
    int main()
    {
      fin >> n >> s;
      for (int i = 1; i <= n; ++i)
      {
        fin >> x;
        v.push_back(x);
      }
      int total_count = 0;
      for (int i = 0; i < n - 1; ++i)
      {
        for (int j = i + 1; j < n; ++j)
        {
          int remaining_sum = s - v[i] - v[j];
          total_count += fr[remaining_sum + NMAX];
        }
        for (int j = 0; j < i; ++j)
          fr[v[i] + v[j] + NMAX]++;
      }
      fout << total_count << '\n';
      return 0;
    }
```

## Resurse

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