Pagini recente » Cod sursa (job #416616) | Cod sursa (job #1344210) | Cod sursa (job #2078525) | Cod sursa (job #1925175) | Cod sursa (job #2940964)
#include<iostream>
#include<fstream>
using namespace std;
ifstream f("rsir.in");
ofstream g("rsir.out");
struct coord
{
long long minus_one, minus_two;
};
long long t1,t2;
long long a,b;
long long x,y,z;
long long m,n;
long long nextNumber(long long tminusone,long long tminustwo)
{
long long val = (a*(tminustwo*tminustwo) + b*(tminusone*tminusone) + x * tminustwo + y * tminusone + z)%m;
return val;
}
void solve()
{
coord tortoise,hare;
tortoise.minus_one = t2;
tortoise.minus_two = t1;
hare.minus_one = t2;
hare.minus_two = t1;
long long val1 = 0;
long long val2 = 0;
while(1)
{
swap(hare.minus_one,hare.minus_two);
hare.minus_one = nextNumber(hare.minus_two,hare.minus_one);
swap(hare.minus_one,hare.minus_two);
hare.minus_one = nextNumber(hare.minus_two,hare.minus_one);
swap(tortoise.minus_one,tortoise.minus_two);
tortoise.minus_one = nextNumber(tortoise.minus_two,tortoise.minus_one);
if(tortoise.minus_one == hare.minus_one && tortoise.minus_two == hare.minus_two)
{
val1 = tortoise.minus_one;
val2 = tortoise.minus_two;
break;
}
}
long long cyclelen = 0;
while(1)
{
cyclelen++;
swap(tortoise.minus_one,tortoise.minus_two);
tortoise.minus_one = nextNumber(tortoise.minus_two,tortoise.minus_one);
if(tortoise.minus_one == val1 && tortoise.minus_two == val2)
break;
}
tortoise.minus_one = t2;
tortoise.minus_two = t1;
long long length_before = 0;
while(1)
{
length_before++;
swap(tortoise.minus_one,tortoise.minus_two);
tortoise.minus_one = nextNumber(tortoise.minus_two,tortoise.minus_one);
if(tortoise.minus_one == val1 && tortoise.minus_two == val2)
break;
}
hare.minus_one = t1;
hare.minus_two = t2;
long long ans = 0;
long long pos = 2;
while(length_before > 0 && pos < n)
{
length_before--;
length_before--;
pos++;
pos++;
swap(hare.minus_one,hare.minus_two);
hare.minus_one = nextNumber(hare.minus_two,hare.minus_one);
swap(hare.minus_one,hare.minus_two);
hare.minus_one = nextNumber(hare.minus_two,hare.minus_one);
}
if(pos > n)
{
if(pos - n == -1)
g<<hare.minus_two;
else
g<<hare.minus_one;
}
else
{
cyclelen = cyclelen % m;
while(cyclelen > 0)
{
cyclelen--;
cyclelen--;
swap(hare.minus_one,hare.minus_two);
hare.minus_one = nextNumber(hare.minus_two,hare.minus_one);
swap(hare.minus_one,hare.minus_two);
hare.minus_one = nextNumber(hare.minus_two,hare.minus_one);
}
if(cyclelen == -1)
g<<hare.minus_two;
else
g<<hare.minus_one;
}
}
void citire()
{
f>>t1>>t2;
f>>a>>b;
f>>x>>y>>z;
f>>m>>n;
}
int main()
{
citire();
solve();
}