Pagini recente » Cod sursa (job #557488) | Cod sursa (job #1209874) | Cod sursa (job #2722983) | Cod sursa (job #1880361)
#include <cstdio>
using namespace std;
FILE *f, *g;
const int buffSize = 4096;
int crChar = 4096;
char buff[4100];
bool isDigit[300];
void getIsDigit()
{
int i;
for(i = '0'; i <= '9'; i ++)
isDigit[i] = 1;
}
void refillBuff()
{
crChar = 0;
fread(buff, 1, buffSize, f);
}
char getCr()
{
if(crChar == 4096)
refillBuff();
return buff[crChar ++];
}
int getNr()
{
char c = getCr();
int nr = 0;
int sign = 1;
while(isDigit[c] == 0 && c != '-')
c = getCr();
while(c == '-')
{
c = getCr();
sign *= (-1);
}
while(isDigit[c] == 1)
{
nr = nr * 10 + c - '0';
c = getCr();
}
return nr * sign;
}
int n, m;
int a[1001][1001];
int urm[1000001];
int ant[1000001];
int lst;
void readFile()
{
getIsDigit();
f = fopen("tablete.in", "r");
n = getNr();
m = getNr();
fclose(f);
}
int firstUnused(int cod)
{
if(cod == 0)
{
int aux = lst;
lst = urm[lst];
return aux;
}
if(cod == 1)
{
int p = lst;
while(p % 2 == 1)
{
p = urm[p];
}
if(p == lst)
{
int aux = lst;
lst = urm[lst];
return aux;
}
else
{
urm[ant[p]] = urm[p];
return p;
}
}
}
void solve()
{
int i, j;
for(i = 1; i <= n * n; i ++)
{
urm[i] = i + 1;
ant[i] = i - 1;
}
urm[n * n] = 0;
ant[1] = 0;
lst = 1;
int k = m;
for(i = 1; i <= n; i ++)
{
for(j = 1; j < k; j ++)
a[i][j] = firstUnused(0);
a[i][k] = firstUnused(1);
for(j = k + 1; j <= n; j ++)
a[i][j] = firstUnused(0);
}
}
void printFile()
{
g = fopen("tablete.out", "w");
int i, j;
for(i = 1; i <= n; i ++)
{
for(j = 1; j <= n; j ++)
fprintf(g, "%d ", a[i][j]);
fprintf(g, "\n");
}
fclose(g);
}
int main()
{
readFile();
solve();
printFile();
return 0;
}