Pagini recente » Cod sursa (job #3348918) | Borderou de evaluare (job #3331201) | Cod sursa (job #3322809) | Borderou de evaluare (job #3331206) | Cod sursa (job #3336352)
#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(n == 3)
fout << "1 2 5\n3 4 6\n7 8 9";
else
if(k % 2 == 0)
afisare();
else
solve();
return 0;
}