Pagini recente » Cod sursa (job #3195913) | Cod sursa (job #2985757) | Cod sursa (job #60188) | Cod sursa (job #1146790) | Cod sursa (job #2779601)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("robotei.in");
ofstream fout("robotei.out");
const int NMAX = 1005;
int n,m,x,y,modx,mody,offsetx,offsety;
int a[NMAX],b[NMAX],afis[NMAX],ver[NMAX][NMAX];
void dfs(int x,int y){
ver[x][y]=-1;
int x2=(x*x+offsetx)%modx;
int y2=(y*y+offsety)%mody;
if(ver[x2][y2]==0) dfs(x2,y2);
if(ver[x2][y2]!=-1)
ver[x][y]=ver[x2][y2]+1;
}
int main()
{
fin >> n >> m >> x >> y >> modx >> mody >> offsetx >> offsety;
ver[x][y]=1;
for(int i=0;i<n;i++){
a[(i*i+offsetx)%modx]++;
b[(i*i+offsety)%mody]++;
}
for(int i=0;i<modx;i++){
for(int j=0;j<mody;j++){
if(ver[i][j]==0)
dfs(i,j);
}
}
int ciclu=ver[(x*x+offsetx)%modx][(y*y+offsety)%mody];
for(int i=0;i<modx;i++){
for(int j=0;j<mody;j++){
int nr=ver[i][j];
if(0<nr and nr<=m){
if(ciclu>0) afis[1+(m-nr)/ciclu]+=a[i]*b[j];
else afis[1]+=a[i]*b[j];
} else afis[0]+=a[i]*b[j];
}
}
if(ciclu<=0){
afis[0]--;
afis[1]++;
} else {
x=(x*x+offsetx)%modx;
y=(y*y+offsety)%mody;
afis[1+(m-ver[x][y])/ciclu]--;
afis[2+(m-ver[x][y])/ciclu]++;
}
for(int i=0;i<=m;i++)
if(afis[i]!=0)
fout << i << ' ' << afis[i] << '\n';
return 0;
}
/*
⠀⠀⠀⠀⠀⠀⠀⠀⠀⣤⣤
⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⣿
⠀⠀⣶⠀⠀⣀⣤⣶⣤⣉⣿⣿⣤⣀
⠤⣤⣿⣤⣿⠿⠿⣿⣿⣿⣿⣿⣿⣿⣿⣀
⠀⠛⠿⠀⠀⠀⠀⠉⣿⣿⣿⣿⣿⠉⠛⠿⣿⣤
⠀⠀⠀⠀⠀⠀⠀⠀⠿⣿⣿⣿⠛⠀⠀⠀⣶⠿
⠀⠀⠀⠀⠀⠀⠀⠀⣀⣿⣿⣿⣿⣤⠀⣿⠿
⠀⠀⠀⠀⠀⠀⠀⣶⣿⣿⣿⣿⣿⣿⣿⣿
⠀⠀⠀⠀⠀⠀⠀⠿⣿⣿⣿⣿⣿⠿⠉⠉
⠀⠀⠀⠀⠀⠀⠀⠉⣿⣿⣿⣿⠿
⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⣿⠉
⠀⠀⠀⠀⠀⠀⠀⠀⣛⣿⣭⣶⣀
⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⣿⣿⣿
⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⠉⠛⣿
⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⠀⠀⣿⣿
⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣉⠀⣶⠿
⠀⠀⠀⠀⠀⠀⠀⠀⣶⣿⠿
⠀⠀⠀⠀⠀⠀⠀⠛⠿⠛
*/