Pagini recente » Cod sursa (job #1017257) | Cod sursa (job #2184287) | Cod sursa (job #1469651) | Cod sursa (job #2309160) | Cod sursa (job #2937774)
/// Preset de infoarena
#include <fstream>
using namespace std;
ifstream fin("robotei.in");
ofstream fout("robotei.out");
const int maxN = 1005, inf = 0x3f3f3f3f;
int n, m, x, y, addx, addy, modx, mody, dist[maxN][maxN], rx[maxN], ry[maxN];
int ans[maxN * maxN];
bool used[maxN][maxN];
int nxt(int x, int add, int mod)
{
return(x * x + add) % mod;
}
void dfs(int x, int y)
{
if(used[x][y])
return;
used[x][y] = 1;
int nx = nxt(x, addx, modx), ny = nxt(y, addy, mody);
dfs(nx, ny);
dist[x][y] = 1 + dist[nx][ny];
}
int main()
{
fin >> n >> m >> x >> y >> modx >> mody >> addx >> addy;
for(int i = 0; i < n; i++)
{
rx[nxt(i, addx, modx)]++;
ry[nxt(i, addy, mody)]++;
}
for(int i = 0; i < modx; i++)
for(int j = 0; j < mody; j++)
dist[i][j] = inf;
dist[x][y] = 0;
used[x][y] = 1;
for(int i = 0; i < modx; i++)
for(int j = 0; j < mody; j++)
dfs(i, j);
int nx = nxt(x, addx, modx), ny = nxt(y, addy, mody);
for(int i = 0; i < modx; i++)
{
for(int j = 0; j < mody; j++)
{
int nr = rx[i] * ry[j], nrap = (m - dist[i][j] - 1) / (dist[nx][ny] + 1);
if(i == nx && j == ny)
{
nr--;
if(dist[i][j] + 1 > m)
ans[1]++;
else
ans[2 + nrap]++;
}
if(dist[i][j] + 1 > m)
ans[0] += nr;
else
ans[1 + nrap] += nr;
}
}
for(int i = 0; i <= m; i++)
if(ans[i])
fout << i << ' ' << ans[i] << '\n';
return 0;
}