Cod sursa(job #2263225)

Utilizator AndreiDeltaBalanici Andrei Daniel AndreiDelta Data 18 octombrie 2018 14:34:08
Problema Tablete Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.31 kb
#include <bits/stdc++.h>
#define Dim 1006
using namespace std;
ifstream f("tablete.in");
ofstream g("tablete.out");
int M[Dim][Dim],iter=1,V[Dim*Dim],cnt,nr;
bool viz[Dim*Dim];

int main()
{
    f>>N>>K;
    for(int i=1;i<=N;i++)
    if(i<N)
    {
        if(K%2==0)
        M[i][K]=M[i-1][K]+K,viz[M[i][K]]=1;
        else
        M[i][K]=M[i-1][K]+K+1,viz[M[i][K]]=1;
    }
    else
    if(i==N&&K!=N-1)
    {
        if(K%2==0) M[i][K]=M[i-1][K]+K,viz[M[i][K]]=1;
        else
        M[i][K]=M[i-1][K]+K+1,viz[M[i][K]]=1;
    }
    else
    if(i==N&&K==N-1)
    {
        if(K%2==0) M[i][K]=M[i-1][K]+K,viz[M[i][K]]=1;
        else
        M[i][K]=M[i-1][K]+K-1,viz[M[i][K]]=1;
    }
    for(int i=K-1;i>=1;i--)
    {
        M[1][i]=M[1][i+1]-1;
        viz[M[1][i]]=1;
    }
    for(int i=2;i<=N;i++)
       for(int j=1;j<=K-1;j++)
     {
         for(int l=iter;l<=N*N;l++)
         if(!viz[l])
         {
             M[i][j]=l;
             viz[l]=1;
             iter=l+1;
         }
     }
    for(int i=iter;i<=N*N;i++)  V[++cnt]=i;

    sort(V+1,V+cnt+1);

    for(int i=1;i<=N;i++)
    for(int j=K+1;j<=N;j++)  M[i][j]=V[++nr];

    for(int i=1;i<=N;i++)
    for(int j=1;j<=N;j++)
    {
        g<<M[i][j]<<" ";
        if(j==N) g<<'\n';
    }
    return 0;
}