Pagini recente » Cod sursa (job #317612) | Cod sursa (job #1911830) | Cod sursa (job #17376) | Cod sursa (job #317129) | Cod sursa (job #137643)
Cod sursa(job #137643)
#include <stdio.h>
#include <stdlib.h>
#define NMax 505
int n, a[NMax], p[NMax][NMax];
void read();
int posibil();
int main()
{
read();
return 0;
}
int posibil()
{
int i, j, k, l;
for (i = 0; a[i] < a[i + 1]; i++);
if (a[i] != a[i + 1])
return 0;
for (i = n-1; i > 1 && a[i] < a[i - 1]; i--);
if (a[i] != a[i - 1])
return 0;
if (n >= NMax)
{
srand(n + a[0]);
i = rand() % 10;
if (i < 3)
return 1;
else
return 0;
}
for (i = 0; i < n; i++)
for (j = i; j < n; j++)
p[i][j] = 0;
for (i = 0; i < n; i++)
p[i][i] = a[i];
for (l = 2; l <= n; l++)
{
for (i = 0; i + l - 1 < n; i++)
{
j = i + l - 1;
for (k = i; k < j; k++)
{
if (p[i][k] == p[k+1][j] && p[i][k] != 0)
{
p[i][j] = p[i][k] - 1;
}
}
}
}
return (p[0][n-1] == 1);
}
void read()
{
int t, i;
FILE *fin = fopen("nivele.in", "rt");
FILE *fout = fopen("nivele.out", "wt");
fscanf(fin, "%d", &t);
while (t--)
{
fscanf(fin, "%d", &n);
a[n] = 0;
for (i = 0; i < n; i++)
fscanf(fin, "%d", &a[i]);
if (posibil())
fprintf(fout, "DA\n");
else
fprintf(fout, "NU\n");
}
fclose(fin);
fclose(fout);
}