Cod sursa(job #1733563)

Utilizator fanache99Constantin-Buliga Stefan fanache99 Data 24 iulie 2016 22:40:07
Problema Rsir Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include<cstdio>
#include<vector>
#define MAXM 7010
using namespace std;
pair<int,int> t0,t1;
int a,b,x,y,z,m;
long long n;
int A[MAXM],B[MAXM];
pair<int,int> f(pair<int,int> x){
    int answer=A[x.first]+B[x.second];
    if(answer>=m)
        answer-=m;
    return make_pair(x.second,answer);
}
int main(){
    freopen("rsir.in","r",stdin);
    freopen("rsir.out","w",stdout);
    int i,l,answer;
    scanf("%d%d%d%d%d%d%d%d%lld",&t0.first,&t0.second,&a,&b,&x,&y,&z,&m,&n);
    for(i=0;i<m;i++){
		A[i]=((((i*i)%m)*a)%m+(i*x)%m)%m;
		B[i]=((((i*i)%m)*b)%m+(i*y+z)%m)%m;
	}
	t0.first%=m;
	t0.second%=m;
	for(t1=f(t0);n>=0&&t1!=t0;t0=f(t0),t1=f(f(t1)),n--)
        if(n==0)
            answer=t0.first;
    for(l=1,t1=f(t0);n>=0&&t1!=t0;t1=f(t1),l++);
    if(n>0)
        for(n=n%l;n>=0;t0=f(t0),n--)
            if(n==0)
                answer=t0.first;
    printf("%d",answer);
    return 0;
}