Pagini recente » Cod sursa (job #894387) | Cod sursa (job #195117) | Cod sursa (job #2403045) | Cod sursa (job #2828459) | Cod sursa (job #2353151)
#include <fstream>
#include <cmath>
#include <cstdio>
#define MAX 1005
using namespace std;
ifstream fin("tablete.in");
int nrI[MAX * MAX], nrP[MAX * MAX], afis[MAX][MAX];
bool usedP[MAX * MAX];
char buff[50002];
int ps = 0;
int v[10], nrr;
void write(char c){
if(ps == 50000){
fwrite(buff, 1, 50000, stdout);
ps = 0;
}
buff[ps++] = c;
}
void writeC(int nr){
while(nr){
v[++nrr] = nr % 10;
nr /= 10;
}
while(nrr){
write(v[nrr] % 10 + '0');
--nrr;
}
write(' ');
}
int main()
{
freopen("tablete.out", "w", stdout);
int n, k;
fin >> n >> k;
n *= n;
int nri = 0, nrp = 0;
for(int i = 1; i <= n; ++i)
if(i % 2 == 1)
nrI[++nri] = i;
else
nrP[++nrp] = i;
int nrL = sqrt(n);
int pPar = 1;
int p1 = 1;
int p2 = nri;
for(int i = 1; i <= nrL; ++i)
{
if(p1 > p2)
{
for(int j = 1; j <= nrL; ++j)
{
while(usedP[pPar])
++pPar;
afis[i][j] = nrP[pPar];
usedP[pPar] = 1;
}
}
else
{
bool ok = 0;
for(int j = 1; j <= k - 1; ++j)
{
if(p1 > p2)
{
p1--;
ok = 1;
for(int jj = j; jj < k; ++jj)
usedP[p1] = 1, afis[i][jj] = nrP[p1++];
afis[i][k] = nrP[p1];
usedP[p1] = 1;
++p1;
break;
}
afis[i][j] = nrI[p1++];
}
if(!ok)
{
afis[i][k] = nrP[p1 - 1];
usedP[p1 - 1] = 1;
}
for(int j = nrL; j > k; --j)
{
if(p1 >= p2)
{
int adaug = 0;
if(p1 == p2)
afis[i][k + 1] = nrI[p1], adaug = 1;
for(int jj = k + 1 + adaug; jj <= j; ++jj)
usedP[p1] = 1, afis[i][jj] = nrP[p1++];
break;
}
afis[i][j] = nrI[p2--];
}
}
}
for(int i = 1; i <= nrL; ++i){
for(int j = 1; j <= nrL; ++j)
writeC(afis[i][j]);
write('\n');
}
fwrite(buff, 1, ps, stdout);
return 0;
}