Cod sursa(job #264030)

Utilizator zizuZidaru Stefan zizu Data 21 februarie 2009 11:09:21
Problema Rsir Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.23 kb
#include<stdio.h>
#include<fstream.h>

int main()
{
 int V0[7000],V1[7000],T0,T1,a,b,x,y,z,m,t0,t1,t2,a0,a1,a2,i,k,l;
 long long n;

 ifstream f1("rsir.in");
 f1>>T0>>T1>>a>>b>>x>>y>>z>>m>>n;

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

	 t0=T0%m; t1=T1%m; k=m*m;
 for(i=1;i<k;++i)
	 {
		  t2=V0[t0]+V1[t1]+z;
		  if(t2>=m)
				t2-=m;
		  if(t2>=m)
				t2-=m;
		  t0=t1; t1=t2;
	 }

	 a0=t0; a1=t1; k=0;
 do
	 {
		  a2=V0[a0]+V1[a1]+z;
		  if(a2>=m)
				a2-=m;
		  if(a2>=m)
				a2-=m;
		  a0=a1; a1=a2; ++k;
	 }
	  while(a0!=t0 || a1!=t1);

	 a0=t0=T0%m; a1=t1=T1%m;
 for(i=0;i<k;++i)
	 {
		  t2=V0[t0]+V1[t1]+z;
		  if(t2>=m)
				t2-=m;
		  if(t2>=m)
				t2-=m;
		  t0=t1; t1=t2;
	 }

	 l=0;
	 while(a0!=t0 || a1!=t1)
	 {
		  ++l;
		  t2=V0[t0]+V1[t1]+z;
		  if(t2>=m)
				t2-=m;
		  if(t2>=m)
				t2-=m;
		  t0=t1; t1=t2;

		  a2=V0[a0]+V1[a1]+z;
		  if(a2>=m)
				a2-=m;
		  if(a2>=m)
				a2-=m;
		  a0=a1; a1=a2;
 }

 if(n<l)
	  t0=T0%m, t1=T1%m, k=n;
 else
	  k=(n-l)%k;
	 for(i=0;i<k;++i)
 {
	  t2=V0[t0]+V1[t1]+z;
	  if(t2>=m)
			t2-=m;
	  if(t2>=m)
			t2-=m;
	  t0=t1; t1=t2;
 }
 ofstream f2("rsir.out");
 f2<<t0;
 return 0;
}