Pagini recente » Monitorul de evaluare | Profil tiwerlol | Istoria paginii utilizator/uaic_lcm | Cod sursa (job #3207589) | Cod sursa (job #2353079)
#include <fstream>
#include <cmath>
#define MAX 1005
using namespace std;
ifstream fin("tablete.in");
ofstream fout("tablete.out");
int nrI[MAX * MAX / 2 + 1], nrP[MAX * MAX / 2 + 1], afis[MAX][MAX];
bool usedP[MAX * MAX];
int main()
{
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)
fout << afis[i][j] << " \n"[j == nrL];
return 0;
}