Cod sursa(job #3336348)

Utilizator GoreaRaresGorea Rares-Andrei GoreaRares Data 24 ianuarie 2026 16:46:43
Problema Tablete Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.58 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin("tablete.in");
ofstream fout("tablete.out");

int n, k, a[1001][1001];

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

void shiftRows(int l1, int l2){
    if(l1 > l2)
        swap(l1, l2);
    int x = a[l1][1], y = a[l2][n];
    vector<int> v;
    for(int i = 1; i <= n; i++)
        v.push_back(a[l2][i]);
    for(int i = 1; i < n; i++)
        a[l1][i] = a[l1][i + 1], a[l2][i + 1] = v[i - 1];
    a[l1][n] = y, a[l2][1] = x;
}


void shiftOddRow(int l){
    swap(a[l - 2][n], a[l][n]);
    int x = a[l][n];
    vector<int> v;
    for(int i = 1; i <= n; i++)
        v.push_back(a[l][i]);
    for(int i = 1; i < n; i++)
        a[l][i + 1] = v[i - 1];
    a[l][1] = x;
}

void shiftFirstRow(){
    swap(a[1][k], a[2][1]);
    int x = a[1][k];
    vector<int> v;
    for(int i = k + 1; i < n; i++)
        v.push_back(a[1][i]);
    for(int i = k; i <= n - 2; i++)
        a[1][i] = v[i - k];
    a[1][n - 1] = x;
}

void solve(){
    if(n % 2 == 0)
        for(int i = 1; i < n; i += 2)
            shiftRows(i, i + 1);
    else{
        for(int i = n; i >= 3; i -= 2)
            shiftOddRow(i);
        shiftFirstRow();
    }
    afisare();
}

int main()
{
    int nr = 0;
    fin >> n >> k;
    for(int i = 1; i <= n; i++)
        for(int j = 1; j <= n; j++)
            a[i][j] = ++nr;
    if(k % 2 == 0)
        afisare();
    else
        solve();
    return 0;
}