Pagini recente » Cod sursa (job #821282) | Cod sursa (job #976729) | Cod sursa (job #2914753) | Cod sursa (job #1505015) | Cod sursa (job #137895)
Cod sursa(job #137895)
#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");
}
}