Cod sursa(job #670131)

Utilizator marius.bucurBucur Marius - Ovidiu marius.bucur Data 28 ianuarie 2012 14:28:31
Problema Tablete Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.82 kb
#include<iostream>
#include<fstream>
#include<cstdlib>
using namespace std;
int N,K;
ifstream in("tablete.in");
ofstream out("tablete.out");
#define foreach(i, N) for(int i=0;i<N;i++)
void solvepar(){
    if(K%2==0){
        int k=1;
        foreach(i,N){
            foreach(j,N){
                out << k << " ";
                k++;
            }
            out << endl;
        }
    } else {
        foreach(i,N) {
            foreach(j, N) {
                if(i%2==0){
                    if(j<N-1)
                        out << (i*N+j+2) << " ";
                    else
                        out << (i*N+j+N+1) << " ";
                } else {
                    if(j==0){
                        out << (i*N+j-N+1) << " ";
                    } else {
                        out << (i*N+j) << " ";
                    }
                }
            }
            out << endl;
        }
    }
}
void print_matr(int**a, int N){
    foreach(i,N){
        foreach(j,N){
            out << a[i][j] << " ";
        }
        out << endl;
    }
}
int**aloc_matr(int N){
    int** a = (int**)malloc(N*sizeof(int*));
    foreach(i,N){
        a[i]=(int*)malloc(N*sizeof(int));
    }
    return a;
}
void solveimpar(){
    if(K%2==0){
        int** a = aloc_matr(N);
        int k = 1;
        foreach(i, N/2) {
            foreach(j, N/2) {
                a[2*i][2*j] = k++;
                a[2*i][2*j+1] = k++;
                a[2*i+1][2*j]=k++;
                a[2*i+1][2*j+1]=k++;
            }
            a[2*i][N-1]=k++;
            a[2*i+1][N-1]=k++;
        }
        foreach(i,N){
            a[N-1][i]=k++;
        }
        print_matr(a, N);
    }
}
int main()
{
    in >> N >> K;
    if(N%2==0)
        solvepar();
    else
        solveimpar();
    return 0;
}