C. K-special Tables



time limit per test



memory limit per test



input



output



People do many crazy things to stand out in a crowd. Some of them dance, some learn by heart rules of Russian language, some try to become an outstanding competitive programmers, while others collect funny math objects.

k-special tables. In case you forget, the table n × n is called k-special if the following three conditions are satisfied:

  • 1 to n2
  • in each row numbers are situated in increasing order;
  • k-th column is maximum possible.

k-special table of size n × n. Both rows and columns are numbered from 1 to n, with rows numbered from top to bottom and columns numbered from left to right.



Input



n and k (1 ≤ n ≤ 500, 1 ≤ k ≤ n) — the size of the table Alice is looking for and the column that should have maximum possible sum.



Output



k-th column of the required table.

n lines should contain the description of the table itself: first line should contains n elements of the first row, second line should contain n

If there are multiple suitable table, you are allowed to print any.



Sample test(s)



input



4 1



output



28 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16



input



5 3



output



85 5 6 17 18 19 9 10 23 24 25 7 8 20 21 22 3 4 14 15 16 1 2 11 12 13



把1-n*n填入n*n的表格中,使得每一行都是递增的,并且使得第K列尽量的大!



分析:



其实这个题不用多想,直接看样例看出规律来!



第K列往后都是从最大n*n递减着来填入,比如说n=5时,



那么第k列及往后是



23 24 25



20 21 22



17 18 19



14 15 16



11 12 13



K列往前是:



9 10



7 8



5 6



3 4



1 2



这样依次填入即可:






#include<bits/stdc++.h>
using namespace std;
const int maxn = 500 + 10;
int a[maxn][maxn];
int main()
{
    int n,k;
    cin >> n >> k;
    int cnt = n * n;
    int sum = 0;
    for (int i = 1; i <= n; ++i){
        for (int j = n; j >= k; --j)
            a[i][j] += cnt--;
        sum += cnt+1;
    }
    for (int i = 1; i <= n; ++i)
        for (int j = k-1; j >= 1; --j)
            a[i][j] = cnt--;
    cout << sum << endl;
    for (int i = 1; i <= n; ++i){
        for (int j = 1; j <= n; ++j){
            if (j > 1)cout << " " ;
            cout << a[i][j];
        }
        cout << endl;
    }
    return 0;
}