Cod sursa(job #271121)

Utilizator Addy.Adrian Draghici Addy. Data 4 martie 2009 22:00:46
Problema A+B Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.41 kb
#include <stdio.h>
#define nrJ 50
#define nrP 500

int a[nrJ+2][nrP+1];
int k,p,x,i,max1,max2,pmax1,pmax2,ok,j,aux;

int main(){

  FILE *f = fopen("concurs2.in", "r");
  FILE *g = fopen("concurs2.out", "w");

  fscanf(f,"%d",&p);

  for (k=1; k<=p; k++) {
    fscanf(f,"%d",&i);
    a[i][0]++;
    fscanf(f,"%d",&a[i][a[i][0]]);
  }

  for (i=1; i<=nrJ; i++) {
    if (a[i][0])
      x++;
    a[i][nrJ+1] = 1;
  }

  fprintf(g,"%d\n",x);

  for (i=1; i<=nrJ; i++)
    if (a[i][0])
      fprintf(g,"%d ",a[i][0]);

  fprintf(g,"\n");

  for (i=1; i<=nrJ; i++)
    if (a[i][0] != 0) {
      do {
	ok = 0;
	for (j=1; j<a[i][0]; j++)
	  if (a[i][j] > a[i][j+1]) {
	    aux = a[i][j];
	    a[i][j] = a[i][j+1];
	    a[i][j+1] = aux;
	    ok = 1;
	  }
      } while (ok);
    }

  for (k=1; k<=p; k+=2) {
    max1 = -1;
    max2 = -1;
    pmax1 = 0;
    pmax2 = 0;

    for (i=1; i<=nrJ; i++)
      if (a[i][0] != 0)
	if (a[i][0] > max1) {
	  pmax2 = pmax1;
	  max2 = max1;
	  pmax1 = i;
	  max1 = a[i][0];
	}
	else
	  if (a[i][0] > max2) {
	    pmax2 = i;
	    max2 = a[i][0];
	  }

    fprintf(g,"%d %d\n",pmax1,a[pmax1][a[pmax1][nrJ+1]]);
    a[pmax1][nrJ+1]++;
    a[pmax1][0]--;

    if (p != 0) {
      fprintf(g,"%d %d\n",pmax2,a[pmax2][a[pmax2][nrJ+1]]);
      a[pmax2][nrJ+1]++;
      a[pmax2][0]--;
    }
  }

  fclose(f);
  fclose(g);

  return 0;
}