Pagini recente » Cod sursa (job #1601165) | Cod sursa (job #235739) | Cod sursa (job #247400) | Cod sursa (job #1918226) | Cod sursa (job #1873075)
#include<fstream>
#include<vector>
#define f first
#define s second
using namespace std;
int n, m, i, j, modx, mody, ox, oy, nx, ny, dist, x, y;
int ff[1005][1005], sol[666800], num[1005][1005], numx[1005], numy[1005];
char viz[1005][1005];
int mx[1001005], my[1001005];
vector< pair<int, int> > v[1005][1005];
ifstream fin("robotei.in");
ofstream fout("robotei.out");
void dfs(int x, int y){
for(int i = 0; i < v[x][y].size(); i++){
int nx = v[x][y][i].f;
int ny = v[x][y][i].s;
if(ff[nx][ny] == 0){
ff[nx][ny] = ff[x][y] + 1;
dfs(nx, ny);
}
}
}
void update(int t){
int nr;
for(i = 0; i < modx; i++){
if(t == 1 && numx[i] == 0){
continue;
}
for(j = 0; j < mody; j++){
if(t == 0){
nr = 1;
}
else{
nr = num[i][j];
}
if( (viz[i][j] == 0 && ff[i][j] == 0) || ff[i][j] > m){
sol[0] += nr;
}
else{
if(ff[i][j] > 0){
if(dist == -1){
sol[1] += nr;
}
else{
sol[ (m - ff[i][j]) / dist + 1] += nr;
}
}
else{
if(dist == -1){
sol[0] += nr;
}
else{
sol[ (m - ff[i][j]) / dist + 1] += nr;
}
}
}
}
}
}
int main(){
fin>> n >> m >> x >> y >> modx >> mody >> ox >> oy;
if(x >= modx || y >= mody){
fout<<"0 "<< n * n - 1 <<"\n"<<"1 1\n";
return 0;
}
ox %= modx;
oy %= mody;
nx = max(modx, mody) * max(modx, mody) + max(ox, oy);
for(i = 1; i <= nx; i++){
mx[i] = mx[i - 1] + 1;
my[i] = my[i - 1] + 1;
if(mx[i] == modx){
mx[i] = 0;
}
if(my[i] == mody){
my[i] = 0;
}
}
nx = x;
ny = y;
while(viz[nx][ny] == 0){
dist++;
viz[nx][ny] = 1;
nx = mx[nx * nx + ox];
ny = my[ny * ny + oy];
}
if(nx != x || ny != y){
dist = -1;
}
for(i = 0; i < n; i++){
nx = (i * i + ox) % modx;
ny = (i * i + oy) % mody;
numx[nx]++;
numy[ny]++;
}
for(i = 0; i < modx; i++){
for(j = 0; j < mody; j++){
num[i][j] += numx[i] * numy[j];
nx = mx[i * i + ox];
ny = my[j * j + oy];
num[nx][ny]--;
v[nx][ny].push_back( make_pair(i, j));
}
}
ff[x][y] = 1;
dfs(x, y);
m++;
update(0);
m--;
update(1);
for(i = 0; i <= m; i++){
if(sol[i] != 0){
fout<< i <<" "<< sol[i] <<"\n";
}
}
return 0;
}