Pagini recente » Cod sursa (job #3185228) | Cod sursa (job #460293) | Cod sursa (job #1914300) | Cod sursa (job #2478102) | Cod sursa (job #1835837)
#include <fstream>
using namespace std;
const int nmax = 1005;
int mat[nmax][nmax];
bool mark[nmax * nmax];
void solve(int N, int K)
{
for(int i = 1;i <= N * N;++i)
{
mark[i] = false;
}
int up_imp = N * N;
if(N % 2 == 0)
{
--up_imp;
}
int cur = 1;
int i, j;
for(i = 0;i < N;++i)
{
int dif = up_imp - cur;
if(dif / 2 + 1 < N)
{
break;
}
for(j = 0;j < N;++j)
{
if(j == K - 1)
{
mat[i][j] = cur - 1;
mark[cur - 1] = true;
}
else
{
mat[i][j] = cur;
cur += 2;
}
}
}
for(j = N - 1;j >= 0;--j)
{
if(up_imp < cur)
{
break;
}
if(j == K - 1)
{
mat[i][j] = up_imp + 1;
mark[up_imp + 1] = true;
}
else
{
mat[i][j] = up_imp;
up_imp -= 2;
}
}
int index = 0;
int pare = 2;
int up_pare = N * N;
if(N % 2 != 0)
{
--up_pare;
}
while(index <= j && pare <= up_pare)
{
if(mark[pare] == false)
{
mat[i][index] = pare;
++index;
}
pare += 2;
}
++i;
j = 0;
while(pare <= up_pare)
{
if(mark[pare] == false)
{
mat[i][j++] = pare;
}
if(j == N)
{
++i;
j = 0;
}
pare += 2;
}
}
int main()
{
ifstream in("tablete.in");
ofstream out("tablete.out");
int N, K;
in >> N >> K;
solve(N, K);
for(int i = 0;i < N;++i)
{
for(int j = 0;j < N;++j)
{
out<<mat[i][j]<<" ";
}
out<<"\n";
}
in.close();
out.close();
}