Cod sursa(job #1588590)

Utilizator dan.andreescdan andr dan.andreesc Data 3 februarie 2016 12:16:43
Problema Factorial Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.66 kb
#include <fstream>
#include <iostream>
using namespace std;
int a[513][513],nr=0;
void pavare(int l1,int c1, int l2, int c2, int x, int y){
    if(l2-l1==1){
        nr++;
        int gol=a[x][y];
        a[l1][c1]=a[l1][c2]=a[l2][c1]=a[l2][c2]=nr;
        a[x][y]=gol;
    }else{
        int l=(l1+l2)/2,c=(c1+c2)/2;
        if(x<=l&&y<=c){ 
            nr++;
            a[l+1][c]=a[l+1][c+1]=a[l][c+1]=nr;
            pavare(l1,c1,l,c,x,y);
            pavare(l+1,c1,l2,c,l+1,c);
            pavare(l+1,c+1,l2,c2,l+1,c+1);
            pavare(l1,c+1,l,c2,l,c+1);
        }
        if(x>l&&y<=c){
            nr++;
            a[l][c]=a[l+1][c+1]=a[l][c+1]=nr;
            pavare(l1,c1,l,c,l,c);
            pavare(l+1,c1,l2,c,x,y);
            pavare(l+1,c+1,l2,c2,l+1,c+1);
            pavare(l1,c+1,l,c2,l,c+1);
        }
        if(x>l&&y>c){
            nr++;
            a[l+1][c]=a[l][c]=a[l][c+1]=nr;
            pavare(l1,c1,l,c,l,c);
            pavare(l+1,c1,l2,c,l+1,c);
            pavare(l+1,c+1,l2,c2,x,y);
            pavare(l1,c+1,l,c2,l,c+1);
        }
        if(x<=l&&y>c){
            nr++;
            a[l+1][c]=a[l+1][c+1]=a[l][c]=nr;
            pavare(l1,c1,l,c,l,c);
            pavare(l+1,c1,l2,c,l+1,c);
            pavare(l+1,c+1,l2,c2,l+1,c+1);
            pavare(l1,c+1,l,c2,x,y);
        }
        
    }
}
ofstream g("pav.out");
int main()
{
    freopen("pav.in","r",stdin);
    int p,igol,jgol;
    scanf("%d%d%d", &p,&igol,&jgol);
    a[igol][jgol]=0;
    int i,n=1;
    for( i=1;i<=p;i++)
        n*=2;
    pavare(1,1,n,n,igol,jgol);
    int j;
    for(i=1;i<=n;i++){
        for(j=1;j<=n;j++)
            g<<a[i][j]<<" ";
        g<<'\n';
    }
    return 0;
}