Cod sursa(job #783349)

Utilizator Cosmin1490Balan Radu Cosmin Cosmin1490 Data 2 septembrie 2012 16:34:55
Problema Tablete Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 3.23 kb
#include <iostream>
#include <fstream>

using namespace std;

const char infile[] = "tablete.in";
const char outfile[] = "tablete.out";




int main(int argc, char* argv[])
{
    int N, K;
    fstream fin(infile, ios::in);
    fin >> N >> K;
    fin.close();
    
    fstream fout(outfile, ios::out);
    

    int N2 = N * N;
    int column = 1;
    if( N == 3)
    {
        fout << "1 2 7\n3 4 8\n5 6 9\n";
    }
    else if((N & 1) == 0 && (K & 1) == 0)
    {
        for(int i = 1 ; i <= N2; i++)
        {
            fout << i << " ";
            
            column++;
            if(column == N + 1)
            {
                column = 1;
                fout << "\n";
            }
        }
    }
    else if( (N & 1) == 0) 
    {
        for(int i = 1 ; i <= N; i++)
        {
            for(int j = 1; j <= N; j++)
            {
                if(j == K - 1 && (i % 2) == 0)
                {
                    fout << (i - 1) + N * j;
                } 
                else if( j == K && i % 2 == 1)
                {
                    fout << (i + 1) + N * (j - 2);
                }
                else
                {
                    fout << i + N * (j - 1);
                }
                fout << " ";
            }
            fout << "\n";
        }
    }
    else if((K & 1) == 0)
    {
        for(int i = 1 ; i <= N; i++)
        {
            for(int j = 1; j <= N; j++)
            {
                if( i == 2 && j == K + 1)
                {
                    fout << N - 1 + N * (j - 2);
                }
                else if(j == K - 1 &&  i >= 4 && i % 2 == 0)
                {
                    fout << (i - 2) + N * j ;
                }
                else if(j == K && i % 2 == 0 )
                {
                    if( i < N - 1)
                    {
                        fout << (i + 2) + N * (j - 2);
                    }
                    else
                    {
                        fout << 2 + N * j;
                    }
                }
                else
                {
                    fout << i + N * (j - 1);
                }
                fout << " ";
            }
            fout << "\n";
            
        }
    }
    else
    {
        for(int i = 1 ; i <= N; i++)
        {
            for(int j = 1; j <= N; j++)
            {
                if( i == 1 && j == K + 1)
                {
                    fout << N  + N * (j - 2);
                }
                else if(j == K - 1 &&  i >= 3 && i % 2 == 1)
                {
                    fout << (i - 2) + N * j ;
                }
                else if(j == K && i % 2 == 1 )
                {
                    if( i < N - 1)
                    {
                        fout << (i + 2) + N * (j - 2);
                    }
                    else
                    {
                        fout << 1 + N * j;
                    }
                }
                else
                {
                    fout << i + N * (j - 1);
                }
                fout << " ";
            }
            fout << "\n";
            
        }
    }
    
    fout.close();
}