Cod sursa(job #2594703)

Utilizator Andrei012Trache Andrei Andrei012 Data 6 aprilie 2020 15:36:58
Problema Tablete Scor 60
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.5 kb
#include <bits/stdc++.h>

using namespace std;
int a[1001][1001],i,k,n;
bool vc[1000001];

bool check(int x){
    if(vc[x]==1)
        return false;
    if(x-i-(i-1)*(n-k)<(i-1)*(k-1))
        return false;
    return true;
}

int main()
{
    ifstream cin("tablete.in");
    ofstream cout("tablete.out");
    int x,j;
    cin>>n>>k;
    if(n%2==0 && k%2==0){
        x=0;
        for(i=1;i<=n;++i)
            for(j=1;j<=n;++j)
                a[i][j]=++x;
    }
    if(n%2==1 && k%2==0){
        x=0;
        for(i=1;i<=n;++i)
            for(j=1;j<=k;++j)
                a[i][j]=++x;
        for(i=1;i<=n;++i)
            for(j=k+1;j<=n;++j)
                a[i][j]=++x;
    }
    if(k%2==1){
        a[1][k]=k+1;
        vc[k+1]=1;
        x=k+3;
        for(i=2;i<=n;++i){
            while(check(x)==false && x<=n*n)
                x+=2;
            a[i][k]=x;
            vc[x]=1;
        }
        x=1;
        for(i=1;i<=n;++i)
            for(j=1;j<=k-1;++j){
                while(vc[x]==1 && x<=n*n)
                    x++;
                a[i][j]=x;
                vc[x]=1;
                ++x;
            }
        for(i=1;i<=n;++i)
            for(j=k+1;j<=n;++j){
                while(vc[x]==1 && x<=n*n)
                    x++;
                a[i][j]=x;
                vc[x]=1;
                ++x;
            }
    }
    for(i=1;i<=n;i++){
        for(j=1;j<=n;j++)
            cout<<a[i][j]<<" ";
        cout<<'\n';
    }
    return 0;
}