Cod sursa(job #134681)

Utilizator anna_bozianuBozianu Ana anna_bozianu Data 12 februarie 2008 02:15:53
Problema Rsir Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include<stdio.h>
struct nod{long long int s;long long int ind;nod *next;};
nod *p[7002],*pp;
long long int t0,t1,a,b,x,y,z,m,j0,j1,f0[7002],f1[7002],i,p2,per,t2,n;
void pune(long long int jj);
int main()
{
	FILE *f,*g;f=fopen("rsir.in","r");g=fopen("rsir.out","w");
	fscanf(f,"%lld%lld",&t0,&t1);
	fscanf(f,"%lld%lld",&a,&b);
	fscanf(f,"%lld%lld%lld",&x,&y,&z);
	fscanf(f,"%lld",&m);
	t0=t0%m;t1=t1%m;a=a%m;b=b%m;x=x%m;y=y%m;z=z%m;
	if(t0<20)pune(0);
	fscanf(f,"%lld",&n);
	for(i=0;i<m;i++){p2=(i*i)%m;f0[i]=(a*p2+x*i+z)%m;f1[i]=(b*p2+y*i)%m;}
	j1=0;
	while(!per)
	{ j1++;t2=f0[t0]+f1[t1];if(t2>=m)t2-=m;t0=t1;t1=t2;
	  if(t0<20)
	  { pp=p[t0];
	    while(pp&&(pp->s!=t1))pp=pp->next;
	    if(pp){j0=pp->ind;per=j1-j0;}
	    else pune(j1);
	  }
	}
	n=n-j0;n=n%per;
	for(i=1;i<=n;i++)
	{ t2=f0[t0]+f1[t1];if(t2>=m)t2-=m;t0=t1;t1=t2;}
	fprintf(g,"%lld\n",t0);
	fcloseall();
	return 0;
}
void pune(long long int jj)
{
	nod *paux;
	paux=new nod;
	paux->s=t1;paux->ind=jj;
	if(!p[t0]){paux->next=0;p[t0]=paux;return;}
	paux->next=p[t0];p[t0]=paux;
}