Cod sursa(job #2031181)

Utilizator Mirela_MagdalenaCatrina Mirela Mirela_Magdalena Data 2 octombrie 2017 20:06:42
Problema Tablete Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.75 kb
#include <fstream>

using namespace std;

ifstream f("tablete.in");
ofstream g("tablete.out");

int n, k, a[1000][1000];
int lk[1000];

void form_lk()
{
    for(int i=1; i<n; i++)
        {
            int x=n*(i-1) + (k-1);
            if(x%2 == 1)
                x--;
            a[i][k]=x+2;
            lk[i]=x+2;
        }
    a[n][k] = (n*n-(n-k))/2*2;
    lk[n] = a[n][k];
}

int caut_bin(int nr, int i, int j)
{
    int num = (i+j)/2;
    if(nr == lk[num])
        return 1;
    else
    {
        if (i<j)
        {
            if  (nr<lk[num])
                caut_bin(nr, i, num-1);
            else caut_bin(nr, num+1, j);

     }
        else return 0;
     }
}



void jum1()
{
    int nr=1;
    for(int i=1; i<=n; i++)
    {
        for(int j=1; j<=k-1; j++)
        {
            while(caut_bin(nr, 1, n) == 1)
                nr++;
            a[i][j] = nr;
            nr++;
        }
    }

}



void jum2()
{
    ///caz_n();
    int l=n;
    int vmax = a[l][k];
    int nr = n*n;
    for(int i=n; i>=1; i--)
    {
        for(int j=n; j>=k+1; j--)
        {
            if(nr == vmax)
                {vmax = a[--l][k]; nr--;}
            a[i][j] = nr;
            nr--;
        }
    }
}



void afis()
{
    for(int i=1; i<=n; i++)
    {
        for(int j=1; j<=n; j++)
            g<<a[i][j]<<" ";
        g<<endl;
    }
}



int main()
{
    f>>n>>k;

    if(n%2==0 && k % 2 == 0)
    {
        for(int i=1; i<=n; i++)
        {
            for(int j=n*(i-1) + 1; j<=n*i; j++)
                g<<j<<" ";
            g<<'\n';
        }
    }
    else{
            form_lk();
            jum1();
            jum2();
            afis();
    }
    return 0;
}