Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <fstream>
- using namespace std;
- ifstream in("pav.in");
- ofstream out("pav.out");
- int n,x,y,cnt;
- int v[513][513];
- int cadran(int x,int y,int n,int m)
- {
- if(x<=n&&y<=m)
- return 1;
- if(x<=n&&y>m)
- return 2;
- if(x>n&&y<=m)
- return 3;
- return 4;
- }
- void rez(int x1,int y1,int x2,int y2,int where,int xx,int yy)
- {
- if(x1==x2&&y1==y2)
- return;
- cnt++;
- int mijx=(x1+x2)/2,mijy=(y1+y2)/2;
- v[mijx][mijy]+=cnt;
- v[mijx+1][mijy]+=cnt;
- v[mijx][mijy+1]+=cnt;
- v[mijx+1][mijy+1]+=cnt;
- int a1=4,a2=3,a3=2,a4=1;
- int xx1,xx2,xx3,xx4,yy1,yy2,yy3,yy4;
- xx1=xx2=mijx;
- xx3=xx4=mijx+1;
- yy1=yy3=mijy;
- yy2=yy4=mijy+1;
- if(where==1)
- {
- xx1=xx;
- yy1=yy;
- v[mijx][mijy]-=cnt;
- a1=cadran(xx,yy,(x1+mijx)/2,(y1+mijy)/2);
- }
- else if(where==2)
- {
- xx2=xx;
- yy2=yy;
- v[mijx][mijy+1]-=cnt;
- a2=cadran(xx,yy,(x1+mijx)/2,(mijy+1+y2)/2);
- }
- else if(where==3)
- {
- xx3=xx;
- yy3=yy;
- v[mijx+1][mijy]-=cnt;
- a3=cadran(xx,yy,(mijx+1+x2)/2,(y1+mijy)/2);
- }
- if(where==4)
- {
- xx4=xx;
- yy4=yy;
- v[mijx+1][mijy+1]-=cnt;
- a4=cadran(xx,yy,(mijx+1+x2)/2,(mijy+1+y2)/2);
- }
- rez(x1,y1,mijx,mijy,a1,xx1,yy1);
- rez(x1,mijy+1,mijx,y2,a2,xx2,yy2);
- rez(mijx+1,y1,x2,mijy,a3,xx3,yy3);
- rez(mijx+1,mijy+1,x2,y2,a4,xx4,yy4);
- }
- int main()
- {
- in>>n>>x>>y;
- int c=cadran(x,y,(1<<(n-1)),(1<<(n-1)));
- rez(1,1,(1<<n),(1<<n),c,x,y);
- for(int i=1; i<=(1<<n); i++)
- {
- for(int j=1; j<=(1<<n); j++)
- out<<v[i][j]<<" ";
- out<<'\n';
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement