Cod sursa(job #1456454)

Utilizator Salomia_Adrian_325CCSalomia Adrian Salomia_Adrian_325CC Data 30 iunie 2015 21:36:50
Problema Lacate Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.39 kb
#include <stdio.h>
#include <stdlib.h>
#include <bits/stdc++.h>

using namespace std;

int main() {
	FILE *f1 = fopen("lacate.in", "r");
	FILE *f2 = fopen("lacate.out", "w");

	int n;
	fscanf(f1, "%d", &n);

	int l, c;
	c = n-1;

	int i, j, k, y;
	int **lacate = (int **) malloc (n * sizeof(int *));
	for(i = 0;i < n;i++)
		lacate[i] = (int *) malloc (c * sizeof(int));

	if(n%2 == 0) {
		l = n/2 * (n-1);
		k = 1;
		for(i = 0;i < n/2;i++)
			for(j = 0;j < c;j++)
				lacate[i][j] = k++;
		k = 0;
		y = 0;
		for(i = n/2;i < n;i++)
			for(j = 0;j < c;j++) {
				lacate[i][j] = lacate[k++][y];
				if(k == n/2) {
					k = 0;
					y++;
				}
			}
	}
	else {
		l = n/2 * (n-1) + (n-1)/2;
		k = 1;
		for(i = 0;i < n/2;i++)
			for(j = 0;j < c;j++)
				lacate[i][j] = k++;
		for(j = 0;j < n/2;j++)
			lacate[i][j] = k;

		k = 0;
		y = 0;
		for(j = n/2;j < c;j++) {
			lacate[i][j] = lacate[k++][y];
			if(k == n/2+1) {
				k = 0;
				y++;
			}
		}
		for(i = n/2+1;i < n;i++)
			for(j = 0;j < c;j++) {
				lacate[i][j] = lacate[k++][y];
				if(y >= n/2) {
					if(k == n/2) {
						k = 0;
						y++;
					}
				}
				else {
					if(k == n/2+1) {
						k = 0;
						y++;
					}
				}
			}

	}

	for(i = 0;i < n;i++)
		sort(lacate[i], lacate[i]+c);

	fprintf(f2, "%d %d\n", l, c);
	for(i = 0;i < n;i++) {
		for(j = 0;j < c;j++)
			fprintf(f2, "%d ", lacate[i][j]);
		fprintf(f2, "\n");
	}




	fclose(f1);
	fclose(f2);
	return 0;
}