Mai intai trebuie sa te autentifici.
Cod sursa(job #471379)
Utilizator | Data | 18 iulie 2010 15:28:57 | |
---|---|---|---|
Problema | Tablete | Scor | 0 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 2.79 kb |
#include <stdio.h>
using namespace std;
long int a[1021][1021];
long int n, K, i, j, k, p;
void afisare ()
{
FILE *g = fopen ("tablete.out","w");
fprintf (g,"%d %d\n", n, K);
int z, t;
for (z=1; z<=n; ++z)
{
for (t=1; t<=n; ++t)
fprintf (g,"%ld ", a[z][t]);
fprintf (g,"\n");
}
fclose(g);
}
int main ()
{
FILE *f = fopen ("tablete.in","r");
fscanf (f,"%ld %ld", &n, &K);
if (K == 1 || n == K && n % 2 != 0)
{
fprintf (g,"-1");
return 0;
}
if (n % 2 == 0 && K % 2 == 0)
{
k = 1;
for (i=1; i<=n; ++i)
{
for (j=1; j<=K; ++j)
{
a[i][j] = k;
k ++;
}
}
for (i=1; i<=n; ++i)
for (j=K+1; j<=n; ++j)
{
a[i][j] = k;
k ++;
}
}
else if (n % 2 == 0 && K % 2 != 0)
{
k = 1;
for (i=1; i<=n; ++i)
for (j=1; j<=K; ++j)
{
if (a[i][j])
continue;
if (j == K && k % 2 != 0)
{
a[i][j] = k + 1;
a[i+1][1] = k;
k += 2;
}
else
{
a[i][j] = k;
k ++;
}
}
for (i=1; i<=n; ++i)
for (j=K+1; j<=n; ++j)
{
a[i][j] = k;
k++;
}
}
else if (n % 2 != 0 && K % 2 != 0)
{
k = 1;
for (i=1; i<n; ++i)
for (j=1; j<=K; ++j)
{
if (a[i][j])
continue;
if (j == K && k % 2 != 0)
{
a[i][j] = k + 1;
a[i+1][1] = k;
k += 2;
}
else
{
a[i][j] = k;
k ++;
}
}
for (j=1; j<=K; ++j)
{
if (j == K && k % 2 != 0)
{
a[i][j] = k + 1;
a[1][K + 1] = k;
}
else
{
a[i][j] = k;
k ++;
}
}
for (i=1; i<=n; ++i)
for (j=K+1; j<=n; ++j)
{
if (a[i][j])
{
k += 2;
continue;
}
else
{
a[i][j] = k;
k ++;
}
}
}
afisare ();
fclose(f);
return 0;
}