沒想到循環比賽日程表還有這種性質= =
直接分治打出循環比賽日程表,從第2行判斷有沒有問題,沒有問題就輸出= =
#include<bits/stdc++.h>
using namespace std;
int n,k;
bool flag;
int a[1030][1030];
inline void prework()
{
scanf("%d%d",&n,&k);
flag=true;
}
inline void mainwork()
{
if(n&1)
{
flag=false;
return;
}
int mi=1;
while(mi<n)
mi=mi*2;
memset(a,0,sizeof(a));
int half=1;
a[1][1]=1;
while(half<mi)
{
for(int i=1;i<=half;i++)
for(int j=1;j<=half;j++)
{
a[i+half][j+half]=a[i][j];
a[i+half][j]=a[i][j]+half;
a[i][j+half]=a[i][j]+half;
}
half<<=1;
}
for(int i=2;i<=k+1;i++)
for(int j=1;j<=n;j++)
if(a[i][j]==0 || a[i][j]>n)
{
flag=false;
return;
}
}
inline void print()
{
if(!flag)
puts("Impossible");
else
for(int i=2;i<=k+1;i++)
{
for(int j=1;j<=n;j++)
printf("%d%c",a[i][j],(j==n)?'\n':' ');
}
}
int main()
{
int t;
scanf("%d",&t);
for(int i=1;i<=t;i++)
{
prework();
mainwork();
print();
}
return 0;
}