Cod sursa(job #2683522)

Utilizator veresflorianveres ioan florian veresflorian Data 11 decembrie 2020 16:16:40
Problema Nivele Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>

using namespace std;

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

int t,v[17];

void init()
{
    for(int i=1,j=0; i<=50000; i*=2,j++)
        v[j]=i;
}

bool rez(int w[],int n)
{
    int s=w[n],i,sm=n;
    for(i=n-1; i>0; i--)
    {
        if(w[i])
        {
            //out<<sm<<'\n';
            if(s%v[sm-i]==0)
                s=s/v[sm-i]+w[i],sm=i;
            else
                return 0;
        }
    }
    if(s%v[sm-1]==0)
        return 1;
    else
        return 0;
}

void cit()
{
    int n,maxi=50001,k=0,w[50002]={0},naxi=0;
    in>>n;
    for(int i=0; i<n && k==0; i++)
    {
        int x;
        in>>x;
        if(x<=maxi)
        {
            w[x]++;
            if(naxi<x)
                naxi=x;
        }
        else
            k=1;
    }
    if(k==0)
    {
        if(rez(w,naxi))
            out<<"DA"<<'\n';
        else
            out<<"NU"<<'\n';
    }
    else
        out<<"NU"<<'\n';
}

int main()
{
    in>>t;

    init();

    for(int i=0; i<t; i++)
        cit();
    return 0;
}