Cod sursa(job #234230)

Utilizator anna_bozianuBozianu Ana anna_bozianu Data 20 decembrie 2008 13:29:45
Problema Tablete Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.48 kb
#include <stdio.h>
int a[1001][1001],n,k,i,j,p;
void readd(),solve(),solve11(),solve10(),solve01(),solve00(),afisare();
int main()
{
    readd();
    solve();
    return 0;
}
void readd()
{
     freopen("tablete.in","r",stdin);
     freopen("tablete.out","w",stdout);
     scanf("%d%d",&n,&k);
}
void solve()
{
    if(n&1)
    { if(k&1)solve11();
      else solve10();
    }
    else
    { if(k&1)solve01();
      else solve00();
    }
}
void solve11()
{
     for(i=1;i<=n;i++)
      for(j=1;j<k;j++)
       a[i][j]=++p;
     a[n][k-1]++;
     a[1][k]=a[n][k-1]-1;
     for(i=2;i<=n;i++)a[i][k]=a[i-1][k]+2;
     for(i=1;i<=n;i++)a[i][k+1]=a[i][k]+3;
     p=a[n][k+1];
     for(i=1;i<=n;i++)
      for(j=k+2;j<=n;j++)
      a[i][j]=p++;
     a[1][k+2]--;
     afisare();
}
void solve10()
{    
     for(i=1;i<=n;i++)
      for(j=1;j<=k;j++)
       a[i][j]=++p;
     for(i=1;i<=n;i++)
      for(j=k+1;j<=n;j++)
       a[i][j]=++p;
     afisare();
}
void solve01()
{
     for(i=1;i<=n;i++)
      for(j=1;j<=k-2;j++)
       a[i][j]=++p;
     for(i=1;i<=n;i++)
      for(j=k-1;j<=k;j++)
       a[i][j]=++p;
     for(i=1;i<=n;i++)
      for(j=k+1;j<=n;j++)
       a[i][j]=++p;
     afisare();
}
void solve00()
{
     for(i=1;i<=n;i++)
      for(j=1;j<=n;j++)
       a[i][j]=++p;
     afisare();
}
void afisare()
{
     for(i=1;i<=n;i++)
      {
          for(j=1;j<=n;j++)
           printf("%d ",a[i][j]);
          printf("\n");
      }
}