Cod sursa(job #1444204)

Utilizator danielmaxim95FMI Maxim Daniel danielmaxim95 Data 29 mai 2015 13:16:25
Problema Taramul Nicaieri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <cstdio>
#define NMAX 101

using namespace std;

int n, in[NMAX], out[NMAX], nrdr = 0, nr[NMAX], matr[NMAX][NMAX];

void citeste()
{
	FILE *f = fopen("harta.in", "r");
	fscanf(f, "%i", &n);

	for (int i = 1; i <= n; i++)
	{
		fscanf(f, "%i%i", &out[i], &in[i]);
		nrdr += in[i];
	}
	fclose(f);
}

void rezolva()
{
	FILE *f = fopen("harta.out", "w");
	int other, k;

	fprintf(f, "%i\n", nrdr);

	for (int i = 1; i <= n; i++)
	{
		for (int j = 1; j <= n; j++)
			nr[j] = 0;

		for (int j = 1; j <= n; j++)
			if (i != j && in[j])
				matr[in[j]][++nr[in[j]]] = j;

		for (int j = n; j > 0; j--)
		{
			k = nr[j];
			while (out[i] && k)
			{
				other = matr[j][k--];
				out[i]--;
				in[other]--;
				fprintf(f, "%i %i\n", i, other);
			}
		}
	}
}

int main()
{
	citeste();
	rezolva();
	return 0;
}