Cod sursa(job #1232235)

Utilizator cristinel.casuCasu Cristi cristinel.casu Data 22 septembrie 2014 15:48:16
Problema Iepuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.24 kb
#include <stdio.h>
#include <malloc.h>

#define X 0
#define Y 1
#define Z 2
#define A 3
#define B 4
#define C 5
#define N 6

#define MAX_MOD 666013

typedef struct _DataSet
{
	int nDataSet[7];
	int nResult;
} DataSet;

void readDataSets(DataSet*** sParam, int** size)
{
	FILE ** input;
	input = (FILE**)malloc(sizeof(FILE*));
	fopen_s(input, "iepuri.in", "r");
	
	int iter = 0;
	int nSize = 0;

	
	fscanf_s(*input, "%d", &nSize);

	*sParam = (DataSet**)malloc(nSize * sizeof(DataSet*));

	for (iter = 0; iter < nSize; ++iter)
	{
		(*sParam)[iter] = (DataSet*)malloc(sizeof(DataSet));
		int a, b, c, d, e, f, g;

		fscanf_s(*input, "%d %d %d %d %d %d %d", 
			&a, &b, &c, &d, &e, &f, &g
		);

		((*sParam)[iter])->nDataSet[0] = a;
		((*sParam)[iter])->nDataSet[1] = b;
		((*sParam)[iter])->nDataSet[2] = c;
		((*sParam)[iter])->nDataSet[3] = d;
		((*sParam)[iter])->nDataSet[4] = e;
		((*sParam)[iter])->nDataSet[5] = f;
		((*sParam)[iter])->nDataSet[6] = g;
	}

	*size = (int*)malloc(sizeof(int));
	**size = nSize;

	fclose(*input);
}

void printResults(DataSet*** pResult, int nSize)
{
	FILE ** output;
	output = (FILE**)malloc(sizeof(FILE*));
	fopen_s(output, "iepuri.out", "w");

	int iter = 0;

	for (int iter = 0; iter < nSize; ++iter)
	{
		fprintf_s(*output, "%d\n", ((*pResult)[iter])->nResult);
	}

	fclose(*output);
}

void calcResults(DataSet*** sParam, int size)
{
	int loop = 0;
	int iter = 0;

	for (iter = 0; iter < size; ++iter)
	{
 		int pResult = 0;
		int n = ((*sParam)[iter])->nDataSet[N] - 3;

		int a = ((*sParam)[iter])->nDataSet[A];
		int b = ((*sParam)[iter])->nDataSet[B];
		int c = ((*sParam)[iter])->nDataSet[C];

		int d_1 = ((*sParam)[iter])->nDataSet[X];
		int d_2 = ((*sParam)[iter])->nDataSet[Y];
		int d_3 = ((*sParam)[iter])->nDataSet[Z];


		for (loop = 0; loop <= n; ++loop)
		{
			pResult = a * d_3 + b * d_2 + c * d_1;
			d_1 = d_2;
			d_2 = d_3;
			d_3 = pResult;
		}

		((*sParam)[iter])->nResult = d_3 % MAX_MOD;
	}
}

int main(int argc, char** argv) 
{
	int* size = NULL;
	DataSet ** dataSet = NULL;
	readDataSets(&dataSet, &size);
	calcResults(&dataSet, *size);
	printResults(&dataSet, *size);
	free(*dataSet);
	free(dataSet);
	free(size);
}