Cod sursa(job #137895)

Utilizator cos_minBondane Cosmin cos_min Data 17 februarie 2008 16:15:45
Problema Nivele Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.08 kb
#include <stdio.h>
#include <fstream>
using namespace std;

#define in "nivele.in"
#define out "nivele.out"
#define dim 50001

int T, N;
int A[dim];

int main()
{
    freopen(in,"r",stdin);
    freopen(out,"w",stdout);
    
    scanf("%d", &T);
    for ( ; T; T-- )
    {
        bool ok = 1, gasit = 0;
        int S = 0, S1 = 0, maxim = -1;
        
        scanf("%d", &N);
        for ( int i = 1; i <= N; i++ )
        {
            scanf("%d", &A[i]);
            
            if ( A[i] > maxim ) maxim = A[i];
        }
        
        if ( N == 1 ) 
        {
             if ( A[1] == 1 ) printf("DA\n");
             else             printf("NU\n");
             
             continue;
        }
        
        for ( int i = 1; i <= N; i++ )
            if ( A[i] > N || A[i] == 1 ) printf("NU\n"), ok = 0; // depaseste nivelul maxim
        
        if ( !ok ) continue;
        
        for ( int i = 2; i <= N; i++ ) // cel putin o pereche are nivele egale
            if ( A[i] == A[i-1] && maxim == A[i] ) gasit = 1;
        
        if ( !gasit )
        {
             printf("NU\n");
             continue;
        }
        
        for ( int i = 2; i < N; i++ )
            S += i;
        
        S += 2*N;
        
        for ( int i = 1; i <= N; i++ )
        {
            S1 += A[i];
            if ( S - S1 < 0 ) break;
        }
        
        if ( S - S1 < 0 ) 
        {
             printf("NU\n");
             continue;
        }
        /*
        int M = A[1]-1, C = 0;
        
        for ( int i = 2; i <= N; i++ )
        {
            if ( A[i] == A[i-1] )
            {
                 if ( C == 1 ) M += A[i] - 1;
                 else C = 1;
            }
            else
            {
                C = 0;
                if ( A[i] > A[i-1] ) M += ( A[i] - A[i-1] );
                else M += A[i] - 2;
            }
        }
        
        if ( M != N - 1 ) 
        {
             printf("NU\n");
             continue;
        }*/
        
        printf("DA\n");
    }
}