Cod sursa(job #324909)

Utilizator AndreiDDiaconeasa Andrei AndreiD Data 17 iunie 2009 23:27:06
Problema Rsir Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.28 kb
#include <cstdio>

#define file_in "rsir.in"
#define file_out "rsir.out"

#define Nmax 7010

int t0,t1,x,y,a,b,z,m;
int x1[Nmax];
int x2[Nmax];
long long n;
int tt0,tt1,ttt0,ttt1,t40,t41;

void go(int &t0,int &t1)
{
	int c=t1;
	t1=x1[t0]+x2[t1]+z;
	t1%=m;
	t0=c;
}

int main()
{
	int i;
	freopen(file_in,"r",stdin);
	freopen(file_out,"w",stdout);
	
	scanf("%d %d %d %d %d %d %d %d %lld", &t0,&t1,&a,&b,&x,&y,&z,&m,&n);
	t0%=m;
	t1%=m;
	
	if (n==0)
	{
		printf("%d", t0);
		
		fclose(stdin);
		fclose(stdout);
		
		return 0;
	}
	
	if (n==1)
	{
		printf("%d", t1);
		
		fclose(stdin);
		fclose(stdout);
		
		return 0;
	}
	
	for (i=0;i<m;++i)
		 x1[i]=(i*i*a+x*i)%m;
	for (i=0;i<m;++i)
		 x2[i]=(i*i*b+y*i)%m;
	
	/*for (i=0;i<m;++i)
		 printf("%d %d\n", x1[i],x2[i]);*/
	
	tt0=ttt0=t40=t0;
	tt1=ttt1=t41=t1;
	
	while(tt0==t0 || tt1==t1)
	{
		go(t0,t1);
		go(tt0,tt1);
		go(tt0,tt1);
	}
	
	while(tt0==t0 || tt1==t1)
	{
		go(t0,t1);
	}
		
	while(t40==t0 || t41==t1)
	{
		n--;
		go(t40,t41);
		if (n==0)
		{
			printf("%d", t41);
			
			fclose(stdin);
			fclose(stdout);
			
			return 0;
		}
	}
	
	for (i=1;i<n;++i) 
		go(t40,t41);   
    printf("%d\n", t41);   

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