Cod sursa(job #73913)

Utilizator anna_bozianuBozianu Ana anna_bozianu Data 22 iulie 2007 14:34:34
Problema Rsir Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.75 kb
#include<stdio.h>
struct nod{ int info;nod *next;};
nod *prim[7000],*ultim[7000];
long long int tt0,tt1,aa,bb,cc,dd,ee,mm,nn,ii,
aaux,ss1,ss0,lred,npred,cat,ltred;
int m,i,ok,t0,t1,tc0,tc1,tc00,tc11,gata,aux,sum[14000],term1[7000],term2[7000];
int pune(int tp1,int tp0);
int main()
{
	FILE *f,*g;
	f=fopen("rsir.in","r");
	g=fopen("rsir.out","w");
	fscanf(f,"%lld%lld",&tt0,&tt1);
	fscanf(f,"%lld%lld",&aa,&bb);
	fscanf(f,"%lld%lld%lld",&cc,&dd,&ee);
	fscanf(f,"%lld%lld",&mm,&nn);
	aa=aa%mm;bb=bb%mm;
	cc=cc%mm;dd=dd%mm;ee=ee%mm;
	tt0=tt0%mm;t0=(int)tt0;
	tt1=tt1%mm;t1=(int)tt1;
	m=(int)mm;
	for(i=0;i<2*m;i++)sum[i]=i%m;
	term1[0]=(int)ee;
	for(i=1;i<m;i++){ ii=(long long int)i;aaux=(aa*ii*ii+cc*ii+ee)%mm;term1[i]=(int)aaux;aaux=(bb*ii*ii+dd*ii)%mm;term2[i]=(int)aaux;}
	tc0=t0;tc1=t1;
	for(;;)
	{ if(ss1==nn) {gata=1;break;}
	  ok=pune(tc0,tc1);
	  if(!ok)break;
	  ss1++;
	  aux=term1[tc0]+term2[tc1];
	  aux=sum[aux];
	  tc0=tc1;
	  tc1=aux;
	}
	if(gata)
	{
		fprintf(g,"%d\n",tc0);
		fcloseall();
		return 0;
	}
	tc00=t0;tc11=t1;
	for(;;)
	{ if(tc00==tc0&&tc11==tc1)break;
	  ss0++;
	  aux=term1[tc00]+term2[tc11];
	  aux=sum[aux];
	  tc00=tc11;
	  tc11=aux;
	}
	lred=ss1-ss0;
	npred=(nn-ss0)/cat;
	ltred=npred*lred;
	nn=nn=ltred;
	for(ii=1;ii<=nn;ii++)
	{
		aux=term1[t0]+term2[t1];
		aux=sum[aux];
		t0=t1;
		t1=aux;
	}
	fprintf(g,"%d\n",t0);
	fcloseall();
	return 0;
}
int pune(int tp1,int tp0)
{
	nod *ppp;
	ppp=new nod;
	if(!prim[tp0])
	{
	  ppp->info=tp1;
	  ppp->next=0;
	  prim[tp0]=ppp;
	  ultim[tp0]=ppp;
	  return 1;
	}
	ppp=prim[tp0];
	while(ppp)
	{ if(ppp->info==tp1)
	  return 0;
	  ppp=ppp->next;
	}
	ppp->info=tp1;
	ppp->next=0;
	ultim[tp0]->next=ppp;
	ultim[tp0]=ppp;
	return 1;
}