Cod sursa(job #284086)

Utilizator AstronothingIulia Comsa Astronothing Data 20 martie 2009 22:56:27
Problema Nivele Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.28 kb
#include <fstream>

using namespace std;

int main()
{
    ifstream f("nivele.in");
    ofstream f2("nivele.out");
    int t;
    f>>t;
    for(;t;--t)
    {
        int n;
        f>>n;
        long long a[50001];
        int poz[50001];

        f>>a[0];
        long long min = a[0];
        int k=-1;
        for(int i=1;i<n;++i)
        {
            f>>a[i];
            if(min > a[i]) min = a[i];
            if(a[i]==a[i-1]) poz[++k] = i;
        }

        while (k>-1)
        {
            if(a[poz[k]] != a[poz[k]-1] || a[poz[k]] <= min) --k;
            else
            {
                a[poz[k]-1]--;
                //shiftleft(a,n,poz[k]);  //nu trebuie pozitiile
                for(int j=poz[k];j<n;++j) a[j]=a[j+1];
                --n;

                if(poz[k]>1 && a[poz[k]-1]==a[poz[k]-2]) poz[k]--;
                else if((a[poz[k]-1] != a[poz[k]] || a[poz[k]]==min)) --k;

            }
        }
        bool ok=1;
        for(int i=1;i<n && ok;i++) if(a[i]!=a[i-1]) {f2<<"NU\n"; ok=false;}
        if(ok)
        {
            long long pow2 = 1;
            for(int i=1;i<min;i++) pow2*=2;

            if(n==pow2) f2<<"DA\n";
            else f2<<"NU\n";
        }


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