Cod sursa(job #2683571)

Utilizator paulm238Madaras Paul paulm238 Data 11 decembrie 2020 17:03:19
Problema Nivele Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <iostream>
#include <fstream>
#include <algorithm>

using namespace std;

ifstream in("nivele.in");
ofstream out("nivele.out");

int n, a[50001];

int tricolor(int x, int y)
{
    if(y == 0)
        return 1;
    if(y == 1)
        return x;
    int g = tricolor(x, y / 2);
    if(y % 2 == 0)
        return g * g;
    else
        return g * g * x;
}

int da(int n, int a[])
{
    if(n > 50000)
        return 0;
    int i;
    int ua = 1, ub = 1;
    sort(a+1, a+n+1);
    for(i = 1; i <= n; i ++)
    {
        if(ua <= 0 || a[i] - ub > 16)
            return 0;
        ua = ua * tricolor(2, a[i] - ub);
        if(ua > n - i + 1)
            return 0;
        ua --;
        ub = a[i];
    }
    if(ua == 0)
        return 1;
    else
        return 0;
}


int main()
{
    int t, i, j;
    in >> t;
    for(j = 1; j <=t; j ++)
    {
        in >> n;
        for(i = 1; i <= n; i ++)
            in >> a[i];
        if(da(n, a) == 1)
            out << "DA" << '\n';
        else
            out << "NU" << '\n';
    }
    return 0;
}