Cod sursa(job #66257)

Utilizator scapryConstantin Berzan scapry Data 17 iunie 2007 10:59:27
Problema Lacate Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <assert.h>
#include <stdio.h>

enum { maxpers = 256 };

int pers;
int locks;
int each;
bool has[maxpers][maxpers * maxpers];

void calc_has()
{
	int i, j, start = 0;

	for(i = pers - 1; i > 0; i--)
	{
		for(j = 0; j < i; j++)
		{
			has[pers - i - 1][start + j] = true;
			has[pers - i - 1 + j + 1][start + j] = true;
		}

		start += i;
	}
}

int main()
{
	int i, j, count;
	FILE *f = fopen("lacate.in", "r");
	if(!f) return 1;

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

	fclose(f);
	f = fopen("lacate.out", "w");
	if(!f) return 1;

	locks = pers * (pers - 1) / 2;
	each = pers - 1;
	fprintf(f, "%d %d\n", locks, each);

	calc_has();

	for(i = 0; i < pers; i++)
	{
		count = 0;

		for(j = 0; j < locks; j++)
		{
			if(has[i][j])
			{
				if(count) fprintf(f, " ");
				count++;

				fprintf(f, "%d", j + 1);
			}
		}

		assert(count == each);
		fprintf(f, "\n");
	}

	fclose(f);
	return 0;
}