Cod sursa(job #360520)

Utilizator rupraRupra C rupra Data 31 octombrie 2009 19:04:48
Problema Rsir Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#include <algorithm>
#include <stdio.h>

#define MAX 7010

using namespace std;

int a, b, x, y, z, m, n, stc, lung;
int urm1[MAX], urm2[MAX];
int aj[MAX][MAX];
int t[MAX * MAX];

int main()
{
	freopen("rsir.in", "r", stdin);
	freopen("rsir.out", "w", stdout);

	scanf("%d %d %d %d %d %d %d %d %d", &t[1], &t[2], &a, &b, &x, &y, &z, &m, &n);
	n++;
	t[1] %= m;
	t[2] %= m;
	aj[t[0]][t[1]] = 1;

	for (int i = 0; i < m; i++)
	{
		urm1[i] = (a * (i * i) + x * i) % m;
		urm2[i] = (b * (i * i) + y * i) % m;
	}

	for (int i = 2; !stc; i++, stc = aj[t[i - 1]][t[i]], lung = i - stc)
	{
		aj[t[i - 1]][t[i]] = i;

		t[i + 1] = urm1[t[i - 1]] + urm2[t[i]] + z;
		if (t[i + 1] >= 2 * m)
			t[i + 1] -= m;
		if (t[i + 1] >= m)
			t[i + 1] -= m;
	}

	if (n < stc)
		printf("%d\n", t[n]);
	else printf("%d\n", t[stc + (n - stc) % lung]);

	fclose(stdin);
	fclose(stdout);
	return 0;
}