# PBinfo #3936 – determinantb – Rezolvare C++

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

## Enunț

Cerința
Se dau n numere întregi, \( a_{1}, a_{2}, …, a_{n} \). 

Calculați valoarea determinantului \( \begin{vmatrix}
1 & 1 & 1 & … & 1 & 1\\ 
a_{1} & a_{2} & a_{3} & … & a_{n-1} & a_{n}\\ 
a_{1}^{2} & a_{2}^{2} & a_{3}^{2} & … & a_{n-1}^{2} & a_{n}^{2}\\ 
… & … & … & … & … & …\\ 
a_{1}^{n-2} & a_{2}^{n-2} & a_{3}^{n-2} & … & a_{n-1}^{n-2} & a_{n}^{n-2}\\ 
a_{1}^{n-1} & a_{2}^{n-1} & a_{3}^{n-1} & … & a_{n-1}^{n-1} & a_{n}^{n-1}
\end{vmatrix} \).

Date de intrare
Fișierul de intrare determinantb.in conține pe prima linie numărul n, iar pe a doua linie n numere întregi separate prin spații.

Date de ieșire
Fișierul de ieșire determinantb.out va conține pe prima linie valoarea determinantului.

Restricții și precizări

2 ≤ n ≤ 1.000
-100 ≤ ai ≤ 100

Exemplu:
determinantb.in

3
1 2 3
determinantb.out

2
Explicație
Avem \( \begin{vmatrix}
1 & 1 & 1\\ 
1 & 2 & 3\\ 
1 & 4 & 9
\end{vmatrix} \) = 2

## Cod sursă C++

```cpp
#include <bits/stdc++.h>
using namespace std;
ifstream f("determinantb.in");
ofstream g("determinantb.out");
int n,i,h,j,t,x,y,inv,lung;
int prod[1000003], a[1003];
int main()
{
    f >> n;
    if(n > 201) g << 0;
    else
    {
        for(i = 1; i <= n; i++)
            f >> a[i];
        inv = 0;
        lung = 1;
        prod[1] = 1;
        for(i = 1; i < n; i++)
        for(j = i+1; j <= n; j++)
        {
            if(a[i] > a[j])
            {
                inv++;
                x = a[i]-a[j];
            }
            else x = a[j]-a[i];
            t = 0;
            for(h = 1; h <= lung; h++)
            {
                y = prod[h]*x+t;
                prod[h] = y % 1000000;
                t = y / 1000000;
            }
            while(t > 0)
            {
                lung++;
                prod[lung] = t % 1000000;
                t = t / 1000000;
            }
        }
        if(inv % 2 == 1) g << "-";
        g << prod[lung];
        for(i = lung-1; i >= 1; i--)
            if(prod[i] < 10) g << "00000" << prod[i];
            else
            if(prod[i] < 100) g << "0000" << prod[i];
            else
            if(prod[i] < 1000) g << "000" << prod[i];
            else
            if(prod[i] < 10000) g << "00" << prod[i];
            else
            if(prod[i] < 100000) g << "0" << prod[i];
            else g << prod[i];
    }
    return 0;
}
```

## Resurse

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