Cod sursa(job #2029617)

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

ifstream f("tablete.in");
ofstream g("tablete.out");
int n, k, a[1008][1008], t=1;

void afisare()
{
    for (int i=1; i<=n; i++)
    {
        for (int j=1; j<=n; j++)
            g << a[i][j]<<' ';
        g <<"\n";
    }
}

void caz2()
{
    int mem;
    for (int i=1; i<n; i++)
    {
        mem=a[i][k];
        for (int j=k; j<n; j++)
        {
            a[i][j]=a[i][j+1];
        }
        a[i][n]=a[i+1][1];
        a[i+1][1]=mem;
    }
    mem=a[n-1][n];
    a[n-1][n]=a[n][n];
    for (int j=n; j>=2; j--)
        a[n][j]=a[n][j-1];
    a[n][2]=mem;
    afisare();
}

void caz3()
{
    int mem;
    for (int i=1; i<n; i++)
    {
        if (i%2==0)
        {
            mem=a[i][k];
            for (int j=k; j<n; j++)
            {
                a[i][j]=a[i][j+1];
            }
            a[i][n]=a[i+1][1];
            a[i+1][1]=mem;
        }
    }
    afisare();
}

void caz4()
{
    int mem;
    for (int i=1; i<n; i++)
    {
        if (i%2==1)
        {
            mem=a[i][k];
            for(int j=k; j<n; j++)
            {
                a[i][j]=a[i][j+1];
            }
            a[i][n]=a[i+1][1];
            a[i+1][1]=mem;
        }
    }
    mem=a[n][n];
    for (int j=n; j>1; j--)
    {
        a[n][j]=a[n][j-1];
    }
    a[n][1]=a[n-1][n];
    a[n-1][n]=mem;
    afisare();
}

int main()
{
    f >> n >> k;
    for (int i=1; i<=n; i++)
    {
        for (int j=1; j<=n; j++)
            {
                a[i][j]=t;
                t++;
            }
    }
    if (n%2==0 && k%2==0)
    {
        afisare();
    }
    else if (n%2==0 && k%2==1)
    {
        caz2();
    }
    else if (n%2==1 && k%2==0)
    {
        caz3();
    }
    else if (n%2==1 && k%2==1)
    {
        caz4();
    }
    return 0;
}