Pagini recente » Cod sursa (job #2833402) | Cod sursa (job #2949312) | Cod sursa (job #2413644) | Cod sursa (job #639817) | Cod sursa (job #3147933)
#include <fstream>
using namespace std;
ifstream fin("robotei.in");
ofstream fout("robotei.out");
const int INF = 0x3f3f3f3f;
const int MAX = 1005;
int addx, addy, modx, mody;
bool used[MAX][MAX];
int rez[MAX * MAX];
int dist[MAX][MAX];
int rx[MAX];
int ry[MAX];
int n, m;
int x, y;
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)
rez[1]++;
else rez[2 + nrap]++;
}
if(dist[i][j] + 1 > m)
rez[0] += nr;
else rez[1 + nrap] += nr;
}
}
for(int i = 0; i <= m; i++)
if(rez[i])
fout << i << ' ' << rez[i] << '\n';
return 0;
}