版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/fanbaobao829/article/details/83722616
#include<bits/stdc++.h>
using namespace std;
const int maxn=1025;
int dp[maxn][maxn],pre[maxn];
void init(int x1,int y1,int x2,int y2)
{
int now=x2-x1+1;
if(now==1)
{
dp[x1][y1]=y1;
return;
}
init(x1,y1,(x1+x2)>>1,(y1+y2)>>1);
init(x1,(y1+y2+1)>>1,(x1+x2)>>1,y2);
for(int i=(x1+x2+1)>>1;i<=x2;i++)
for(int j=y1;j<=y2;j++)
dp[i][j]=dp[i-(now>>1)][(j-y1+(now>>1))%now+y1];
}
int main()
{
init(1,1,1024,1024);
for(int i=1;i<maxn;i++)
if(i&1)
pre[i]=1;
else
pre[i]=pre[i/2]*2;
int t,n,k;
scanf("%d",&t);
while(t--&&scanf("%d%d",&n,&k)!=EOF)
if(k>=pre[n])
printf("Impossible\n");
else
for(int i=2;i<=k+1;i++)
{
for(int j=1;j<n;j++)
printf("%d ",dp[i][j]);
printf("%d\n",dp[i][n]);
}
return 0;
}