Cod sursa(job #162951)

Utilizator alecmanAchim Ioan Alexandru alecman Data 20 martie 2008 22:47:49
Problema Nivele Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.46 kb
#include<stdio.h>

#define INPUT "nivele.in"
#define OUTPUT "nivele.out"

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

typedef struct lista
{
  long value;
  struct lista *prec,*next;
};

long N;

lista *p;

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()
{
  lista *adr;

  long a;

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

  p = NULL;

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

    adr = new lista;
    adr -> value = a;
    adr -> next = p;
    adr -> prec = NULL;
    p -> prec = adr;
    p = adr;
  }
}

int solveFunction()
{
  lista *adr;

  adr = p -> next;

  while(adr != NULL)
  {
//    while( adr -> value == adr -> prec -> value || adr -> value == adr -> next -> value)
  //  {
      if(adr -> value == adr -> prec -> value)
      {
	adr -> prec -> value = (adr -> value) - 1;

	adr -> next -> prec = adr -> prec;
	adr -> prec -> next = adr -> next;
      }
      else
      {
	adr -> value = (adr -> value) - 1;

	adr -> next -> next -> prec = adr;
	adr -> next = adr -> next -> next;
      }
    //}

    adr = adr -> next;
  }

  if(p -> value == 1 && p -> next == NULL)
    return 1;
  return 0;
}