Cod sursa(job #2029619)

Utilizator cont_nouCont Nou cont_nou Data 30 septembrie 2017 12:09:42
Problema Tablete Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.79 kb
#include <iostream>
#include <fstream>
using namespace std;

int main()
{
    ifstream in ("tablete.in");
    ofstream out ("tablete.out");
    int n, k;
    in >> n >> k;
    int tablete[n][n], nrc = 1;

    for (int i = 0; i < n; i++)
        for (int j = 0; j < n; j++)
            tablete[j][i] = nrc++;

    if (k % 2 == 1 && n % 2 == 0)
    {
        for (int i = 0; i < n - 1; i += 2)
        {
            for (int j = 0; j < n-1; j++)
            {
                swap(tablete[j][i], tablete[j+1][i]);
            }
            for (int j = n-1; j > 0; j--)
            {
                swap(tablete[j][i+1], tablete[j-1][i+1]);
            }
            swap(tablete[n-1][i], tablete[0][i+1]);
        }
    }
    else if (n % 2 == 1)
    {
        if (k % 2 == 0)
        {
            for (int i = 1; i < n; i += 4)
            {
                for (int j = 0; j < n-1; j++)
                {
                    swap(tablete[j][i], tablete[j+1][i]);
                }
                for (int j = n-1; j > 0; j--)
                {
                    swap(tablete[j][i+2], tablete[j-1][i+2]);
                }
                swap(tablete[n-1][i], tablete[0][i+2]);

            }
        }
        else
        {
            for (int i = 0; i < n; i+=2)
            {
                if (i == n - 1)
                    swap (tablete[k-1][i], tablete[n-1][i-1]);
                else
                    swap (tablete[k-1][i], tablete[0][i+1]);
            }
        }
    }
    if (n == 3)
        out << "1 2 5" << endl << "3 4 6" << endl << "7 8 9";
    else
        for (int i = 0; i < n; i++)
        {
            for (int j = 0; j < n; j++)
                out << tablete[j][i] << ' ';
            out << endl;
        }
    return 0;
}