Pagini recente » Cod sursa (job #2912431) | Cod sursa (job #1645639) | Cod sursa (job #1888984) | Cod sursa (job #447733) | Cod sursa (job #3300931)
#include <bits/stdc++.h>
#define int long long
using namespace std;
ifstream f ("robotei.in");
ofstream g ("robotei.out");
const int NMAX=1e6;
int n, m, x, y, modx, mody, offsetx, offsety, rez[NMAX+5], X[NMAX+5], Y[NMAX+5], viz[1005][1005];
int nr (int x, int y)
{
return (x-1)*n+y;
}
void dfs (int i, int j)
{
int inou, jnou;
viz[i][j]=-1;
inou=(i*i+offsetx)%modx;
jnou=(j*j+offsety)%mody;
if (viz[inou][jnou]==0)
dfs (inou, jnou);
if (viz[inou][jnou]!=-1)
viz[i][j]=viz[inou][jnou]+1;
}
int32_t main ()
{
f >> n >> m >> x >> y >> modx >> mody >> offsetx >> offsety;
for (int i=0;i<n;i++)
{
X[(i*i+offsetx)%modx]++;
Y[(i*i+offsety)%mody]++;
}
viz[x][y]=1;
for (int i=0;i<modx;i++)
{
for (int j=0;j<mody;j++)
{
if (viz[i][j]==0)
dfs (i, j);
}
}
int lncycle=viz[(x*x+offsetx)%modx][(y*y+offsety)%mody];
for (int i=0;i<modx;i++)
{
for (int j=0;j<mody;j++)
{
int l=viz[i][j];
if (l>0 && l<=m)
{
if (lncycle<=0)
rez[1]+=X[i]*Y[j];
else
rez[1+(m-l)/lncycle]+=X[i]*Y[j];
}
else
rez[0]+=X[i]*Y[j];
}
}
x=(x*x+offsetx)%modx;
y=(y*y+offsety)%mody;
if (lncycle<=0)
{
rez[0]--;
rez[1]++;
}
else
{
rez[1+(m-viz[x][y])/lncycle]--;
rez[2+(m-viz[x][y])/lncycle]++;
}
for (int i=0;i<=m;i++)
{
if (rez[i]!=0)
cout << i << " " << rez[i] << "\n";
}
return 0;
}