Cod sursa(job #2316826)

Utilizator cameliapatileaPatilea Catalina Camelia cameliapatilea Data 12 ianuarie 2019 14:36:32
Problema Tablete Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.73 kb
#include <cstdio>

long matrice[1001][1001];
bool vector_marcaj[1000001];

long n, k;

void caz1()
{

    int i, j, k=0;

    for(i=1;i<=n;++i)
        for(j=1;j<=n;++j) matrice[i][j]=++k;
}

void caz2()
{
    int i, j;
    long p;
    long nr = n * n;

    matrice[1][k]= k + 1;
    vector_marcaj[matrice[1][k ]] = 1;

    for(i = 2; i <= n; i++)
        if(i % 2 != 0) {
            matrice[i][k] = matrice[i - 1][k] + k - 1;
            vector_marcaj[matrice[i][k]] = 1;
        }
        else {
            matrice[i][k] = matrice[i - 1][k] + k + 1;
            vector_marcaj[matrice[i][k]] = 1 ;
        }

    p = 0;

    for(i = 1; i <= n; i++)
        for(j = 1; j <= k; j++)
            if(!matrice[i][j])
            {
                ++k;
                while(vector_marcaj[k] && k <= nr) ++p;
                matrice[i][j]=k;
            }


    for(i = 1;i <= n; i++)
        for(j = k+ 1;j <= n;j ++ )
            if(!matrice[i][j])
            {
                ++p;
                while(vector_marcaj[p] && p <= nr) ++p;
                matrice[i][j]=k;
            }

}


void caz3()
{
    int i, j, p = 0;

    for(i = 1;i <= n; i++)
        for(j = 1; j <= k; j++) matrice[i][j] = ++p;

    for(i = 1;i <= n; i++)
        for(j = p + 1;j <= n; j++) matrice[i][j] = ++p;

}
int main()
{
   FILE *f = fopen("tablete.in", "r");
   FILE *g = fopen("tablete.out", "w+");

    fscanf(f, "%d%d", &n, &k);

    if((n % 2 == 0) && (k % 2 == 0) ) caz1();
    if((n % 2 == 0) && (k % 2 != 0)) caz2();
    if((n % 2 != 0) && (k % 2 != 0)) caz2();
    if((n % 2 != 0) && (k % 2 == 0)) caz3();
    int i, j;

    for(i = 1;i <= n; i++)
    {
        for(j = 1;j <= n; j++)
            fprintf(g, "%d ", matrice[i][j]);
        fprintf(g, "\n");
    }

    return 0;
}