Pagini recente » Cod sursa (job #712009) | Cod sursa (job #1875192) | Cod sursa (job #936503) | Cod sursa (job #276580) | Cod sursa (job #1682350)
/*#include <fstream>
using namespace std;
int v[2][1001],n,cp;
ifstream cin("tablete.in");
ofstream cout("tablete.out");
void afisare(int n)
{
for(int i=1; i<=2; i++)
{
for(int j=1; j<=n; j++)
cout<<v[i][j]<<' ';
cout<<'\n';
}
}
void update(int val,int n)
{
for(int i=1; i<=2; i++)
{
for(int j=1; j<=n; j++)
{
v[i][j]+=val;
}
}
}
int main()
{
int n,k;
cin>>n>>k;int cp=n;
if(n%2==0&&k%2==0)
{
for(int i=1; i<=n*n; i++)
{
cout<<i<<" ";
if(i%n==0)cout<<'\n';
}
}
if(n%2==0&&k%2==1)
{
for(int i=1; i<n; i++)
{
v[1][i]=i+1;
}
v[1][n]=2*n;
v[2][1]=1;
for(int i=2; i<=n; i++)
{
v[2][i]=n-1+i;
}
v[2][n]=2*n-1;
for(int i=1;i<=n/2;++i)
{
afisare(n);
update(2*n,n);
}
}
if(n%2==1&&k%2==0)
{
for(int i=1; i<n; i++)
{
v[1][i]=i;
v[2][i]=i+n-1;
}
v[1][n]=2*n-1;
v[2][n]=2*n;
for(int i=1;i<=n/2;++i)
{
afisare(n);
update(2*n,n);
}
for(int i=1;i<=n;i++)
{
cout<<(n-1)*n+i<<" ";
}cout<<'\n';
}
if(n%2==1&&k%2==1)
{v[2][1]=1;
for(int i=1;i<=n;i++)
{
v[1][i]=i+1;
}
for(int i=2;i<=n;i++)
{
v[2][i]=i+n;
}
afisare(n);
for(int i=2;i<=n/2-1;i++)
{
update(2*n,n);
afisare(n);
}
update(2*n,n);
v[2][n]=n*n;
afisare(n);
for(int i=1;i<=n;i++)
{
cout<<n*n-n-1+i<<' ';
}
cout<<'\n';
}
return 0;
}
*/
#include<stdio.h>
#define InFile "tablete.in"
#define OutFile "tablete.out"
#define Nmax 1000
FILE *fin=freopen(InFile,"r",stdin),*fout=freopen(OutFile,"w",stdout);
long a[Nmax+1][Nmax+1];
int n,K,uz[Nmax*Nmax+2];
void Tablete(int i)
{if(i==n+1) return;
int ok=1;
long nr=i*K%2==0?i*K:i*K+1,lg=0,j,v[Nmax+1],nr2;
do
{if(!ok)
{nr+=2; for(j=1;j<=lg;j++) uz[v[i]]=0;}
ok=1;
if(uz[nr]) while(uz[nr]&&nr<=n*n) nr+=2;
a[i][K]=nr; uz[nr]=1; v[++lg]=nr;
for(j=K-1;j>=1&&ok;j--)
{nr2=a[i][j+1]-1;
if(uz[nr2]) while(uz[nr2]&&nr2>=1) nr2--;
if(nr2<=1&&j>1) ok=0;
else {a[i][j]=nr2; uz[nr2]=1; v[++lg]=nr2;}
}
}while(!ok);
Tablete(i+1);
}
int main()
{long i,j,nr;
scanf("%d %d",&n,&K);
fclose(fin);
Tablete(1);
for(i=1;i<=n;i++)
{nr=n-K;
for(j=1;j<=K;j++) printf("%ld ",a[i][j]);
for(j=a[i][K];j<=n*n&&nr;j++)
if(!uz[j]) {printf("%ld ",j); uz[j]=1; nr--;}
printf("\n");
}
fclose(fout);
}