#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,k;
void solve()
{
    cin>>n>>k;
    int x = 0,y = k;
    for(int i = 1 ; i <= n ; ++i)
        for(int j = 1 ; j <= n ; ++j)
        {
            if(i == j)cout<<y<<" \n"[j == n];
            else cout<<x<<" \n"[j == n];
        }
}
signed main()
{
    int t = 1;
//     cin>>t;
    while(t--)
        solve();
    return 0;
}

其实凡是构造题目,只需要对题目有些理解,然后把特殊的化成一般的情况就可以了。

我们基本上题目就发现题目有以下性质:任意选取一个对角线,假设这上面的数字是y,其他位置都填x。

这样子每个y都只作用于一行一列。

那么就可以出现合法的情况:每一行每一列的值都是(n+1)x+y=k。

由于题目并没有要求x y要是不相等的,可以考虑把x赋值成1,y可以用k和n表示出来。

当然更简单的是让x=0那么y=k了,那也就是选取的对角线的所有值为y,其他值都为0。