//找规律,要第k列和最大,并且每行都是递增的,我们可以找到第k列最大的那个数,然后发现第k列的数相差k,慢慢按照顺序填数。
这道题运行结果有很多种,不局限于样例给出的结果
#include <stdio.h>
int arr[1010][1010];
int main()
{
int n,k;
while(~scanf("%d%d",&n,&k))
{
int sum=n*n;
int key=sum-(n-k);
int temp=key;
for(int i=1;i<=n;++i)
{
for(int j=k;j<=n;++j)
{
arr[i][j]=temp;
temp++;
}
temp=key-(n-k+1)*i;
}
int t=1;
for(int i=1;i<=n;++i)
{
for(int j=1;j<k;++j)
{
arr[i][j]=t;
t++;
}
}
int i,j;
int ans=0;
for(int i=1;i<=n;++i)
ans+=key,key-=(n-k+1);
printf("%d\n",ans);
for(i=1;i<=n;++i)
{
for(j=1;j<n;++j)
{
printf("%d ",arr[i][j]);
}
printf("%d\n",arr[i][j]);
}
}
return 0;
}