Pagini recente » Cod sursa (job #213604) | Cod sursa (job #995266) | Cod sursa (job #1660506) | Cod sursa (job #1665582) | Cod sursa (job #877806)
Cod sursa(job #877806)
#include <fstream>
using namespace std;
ifstream fi ("robotei.in");
ofstream fo ("robotei.out");
const int mmax = 666735, modmax = 1002;
int N, M, X, Y, modX, modY, offsetX, offsetY;
int F[mmax], R[modmax][modmax];
void cit ()
{
fi >> N >> M >> X >> Y >> modX >> modY >> offsetX >> offsetY;
}
void pre ()
{
int x, y, nrx, nry;
for (x = 0; x < modX; x++)
{
for (y = 0; y < modY; y++)
{
nrx = (N - 1 - x) / modX + 1;
nry = (N - 1 - y) / modY + 1;
R[x][y] += nrx * nry;
}
}
}
void rez ()
{
int x, y, pozx, pozy, m, k;
for (x = 0; x < modX; x++)
{
for (y = 0; y < modY; y++)
{
k = 0;
pozx = x;
pozy = y;
for (m = 1; m <= M; m++)
{
pozx = (pozx * pozx + offsetX) % modX;
pozy = (pozy * pozy + offsetY) % modY;
if (pozx == X && pozy == Y)
{
k++;
}
}
if (x == X && y == Y)
{
F[k] += R[x][y] - 1;
F[k + 1] ++;
}
else
{
F[k] += R[x][y];
}
}
}
}
void afi ()
{
if (X >= modX || Y >= modY)
{
fo << '0' << ' ' << N * N - 1 << '\n';
fo << '1' << ' ' << 1 << '\n';
return;
}
for (int m = 0; m <= M; m++)
{
if (F[m] == 0)
continue;
fo << m << ' ' << F[m] << '\n';
}
}
int main ()
{
cit ();
pre ();
rez ();
afi ();
return 0;
}