Cod sursa(job #3336375)

Utilizator GoreaRaresGorea Rares-Andrei GoreaRares Data 24 ianuarie 2026 17:16:59
Problema Tablete Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.8 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 shiftRow(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 shiftRow12(int l){
    swap(a[l][k], a[l + 1][1]);
    int x = a[l][k];
    vector<int> v;
    for(int i = k + 1; i < n; i++)
        v.push_back(a[l][i]);
    for(int i = k; i <= n - 2; i++)
        a[l][i] = v[i - k];
    a[l][n - 1] = x;
}

void solve(){
    if(n % 2 == 0){
        if(k % 2 == 1)
            for(int i = 1; i < n; i += 2)
                shiftRows(i, i + 1);
    }
    else
        if(k % 2 == 1){
            for(int i = n; i >= 3; i -= 2)
                shiftRow(i);
            shiftRow12(1);
        }
        else{
             for(int i = n - 1; i >= 4; i -= 2)
                shiftRow(i);
            shiftRow12(2);
        }
    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(n == 3)
        fout << "1 2 5\n3 4 6\n7 8 9";
    else
        solve();
    return 0;
}