Cod sursa(job #231742)

Utilizator haidesportulRazvan Ionescu haidesportul Data 14 decembrie 2008 12:53:04
Problema Tablete Scor 20
Compilator cpp Status done
Runda Algoritmiada 2009, Runda 1, Studenti Marime 1.69 kb
# include <iostream>
# include <fstream>
using namespace std;

struct matrice
{
    int n;
    int** matr;
    
    matrice();
    matrice(int n);
    void print(ofstream out);
};

matrice::matrice()
{
    n=0;
    matr=NULL;
}

matrice::matrice(int n)
{
    if(n<0) return;
    matr=new int* [n];
    for(int i=0; i<n; i++)
        matr[i]=new int[n];
    this->n=n;
}

void citeste(const char* filename, int &n, int &k)
{
    ifstream in(filename);
    in>>n>>k;
    in.close();
}

void ciocolataaa(int n, int k, matrice &m)
{
    if(n%2==0&&k%2==0)
    {
        for(int i=0; i<n; i++)
            for(int j=0; j<n; j++)
                m.matr[i][j]=i*n+(j+1);
    }
    else 
    {
        bool *bagat=new bool[n*n];
        for(int i=0; i<n*n; i++) bagat[i]=false;
        for(int i=0; i<n; i++)
        {
            int i_bagat=0;
            while(bagat[i_bagat]) i_bagat++;
            for(int j=0; j<n; j++)
            {
                if(j==k-1)
                {
                    while (((i_bagat+1)%2!=0)||(bagat[i_bagat])) i_bagat++;
                    m.matr[i][j]=i_bagat+1;
                    bagat[i_bagat]=true;
                }
                else
                {
                    while(bagat[i_bagat]) i_bagat++;
                    m.matr[i][j]=i_bagat+1;
                    bagat[i_bagat]=true;
                }
            }
        }
    }
}

int main()
{
    int n,k;
    citeste("tablete.in", n, k);
    if(n<2||k<2) return 0;
    if(k>n) return 0;
    matrice m(n);
    ciocolataaa(n, k, m);
    ofstream out("tablete.out");
    for(int i=0; i<n; i++)
    {
        for(int j=0; j<n; j++)
            out<<m.matr[i][j]<<' ';
        out<<'\n';
    }
    out.close();
    return 0;
}