Cod sursa(job #2683514)

Utilizator razviii237Uzum Razvan razviii237 Data 11 decembrie 2020 15:57:29
Problema Nivele Scor 70
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.12 kb
#include <iostream>
#include <fstream>
#include <algorithm>

using namespace std;

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

const int maxn = 50005;

int n;
int a[maxn];

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

bool solve(int n, int a[]) {
    if(n > 50000) { return false; }
    int i;
    int lasty = 1, lastx = 1;
    sort(a+1, a+n+1);
    for(i = 1; i <= n; i ++) {
        if(lastx <= 0) { return true; }
        if(a[i] - lasty > 16) { return false; }
        lastx = lastx * pwr(2, a[i] - lasty);
        if(lastx > n - i + 1) { return false; }
        lastx --;
        lasty = a[i];
    }
    if(lastx == 0) { return true; }
    return false;
}


int main()
{
    int t;
    f >> t;
    while(t --) {
        f >> n;
        for(int i = 1; i <= n; i ++) {
            f >> a[i];
        }
        g << (solve(n, a) == true ? "DA" : "NU") << '\n';
    }

    f.close(); g.close();
    return 0;
}