Cod sursa(job #162903)

Utilizator alecmanAchim Ioan Alexandru alecman Data 20 martie 2008 21:36:59
Problema Nivele Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.39 kb
#include<stdio.h>
#include<string.h>

#define INPUT "nivele.in"
#define OUTPUT "nivele.out"
#define CL(x) memset(x,0,sizeof(x));
#define NMax 50002

FILE *fin = fopen(INPUT, "r"), *fout = fopen(OUTPUT, "w");

long N, nrTot;
long a[ NMax ], stiva[ NMax ];

void readValues();

int solveFunction();

int main()
{
  int T;

  fscanf(fin, "%d", &T);

  for(int i = 1; i <= T; ++i)
  {
    readValues();

    if(solveFunction())
      fprintf(fout, "DA\n");
    else
      fprintf(fout, "NU\n");
  }

  fclose(fin);
  fclose(fout);

  return 0;
}

void readValues()
{
  CL(a);
  CL(stiva);

  fscanf(fin, "%ld", &N);

  for(long i = 0; i < N; ++i)
    fscanf(fin, "%ld", &a[ i ]);
}

int solveFunction()
{
  int indicator = -1;

  nrTot = 0;

  for(long i = 1; i < N; ++i)
  {
    if(a[ i ] > a[ i - 1] && indicator != 2)
    {
      indicator = 1;

      stiva[ ++nrTot ] = a[ i - 1];
    }

    else
    if(a[ i ] == a[ i - 1])
    {
      indicator = 2;
    }

    else
    if(a[ i ] < a[ i - 1])
    {
      if(indicator == 1)
      {
        return 0;
      }

      else
      if(indicator == 2)
      {
	for(int j = 0; j <= nrTot; ++j)
          if( stiva[ j ] == a[ i - 1 ])
	  {
            return 0;
	  }

	stiva[ ++nrTot ] = a[ i - 1];

	indicator = 3;
      }
    }
  }

  if(indicator != 2)
    return 0;

  return 1;
}