Cod sursa(job #954064)

Utilizator claudiumihailClaudiu Mihail claudiumihail Data 28 mai 2013 09:19:20
Problema Tablete Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.07 kb
#include <fstream>
#include <iostream>
#include <iterator>
#include <algorithm>

#define MAXN 1001

using namespace std;

int mat[MAXN][MAXN];

template <typename OutStream, typename IterOut>
void print_matrix(OutStream& outStream, IterOut& itOut, int n)
{
    for (int i=1; i<=n; ++i)
    {
        copy_n(mat[i] + 1, n, itOut);
        outStream << "\n";
    }
}

int main()
{
    int n, k;
    fstream fin("tablete.in", fstream::in);
    fstream fout("tablete.out", fstream::out);
    
    fin >> n >> k;
    //cout << n << " " << k << endl;
    
    int nr = 1;
    for (int i=1; i<=n; ++i)
    {
        for (int j=1; j<=n; ++j)
        {
            mat[i][j] = nr;
            nr++;
        }
    }
    
    ostream_iterator<int> itOut(fout, " ");
    
    int aux;
    if (n % 2 == 0)
    {
        if (k % 2 != 0)
        {
            

            for (int i=2; i<=n; ++i)
            {
                aux = mat[i-1][n];
                mat[i-1][n] = mat[i][k];

                for (int j=k; j>1; --j)
                {
                    mat[i][j] = mat[i][j-1];
                }
                
                mat[i][1] = aux;
            }
            
            aux = mat[1][k];
            
            for (int i=k; i<=n; ++i)
            {
                swap(mat[1][i], mat[i][1]);
            }
        }
    }
    else
    {
        int start = k % 2 ? 3 : 2;
        
        for (int i = start; i<=n; i+=2)
        {
            aux = mat[i][k];

            for (int j=k; j>1; --j)
            {
                mat[i][j] = mat[i][j-1];
            }
            
            mat[i][1] = mat[i-1][n];
            mat[i-1][n] = aux;
        }
        
        if (k % 2 != 0)
        {
            aux = mat[1][n];
            
            for (int j=k; j<n; ++j)
            {
                mat[1][j] = mat[1][j+1];
            }
            
            mat[1][n] = mat[n][1];
            mat[n][1] = aux;
        }
    }
    
    print_matrix(fout, itOut, n);
    
    return 0;
}