Cod sursa(job #289947)

Utilizator raica_cristiraica dumitru cristian raica_cristi Data 27 martie 2009 11:01:42
Problema Tablete Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.19 kb
#include<stdio.h>
#define p 1001
int n,m,k,i,a[p][p],j,l;
int val[1000001];
void afis()
{
     int i,k;
     for(i=1;i<=n;i++,printf("\n"))
     for(k=1;k<=n;k++)
     printf("%d ", a[i][k]);
}
void fill(int w)
{
     int x=1;
     if(w==1)
     {
             
             for(i=1;i<=n;i++)
             for(j=1;j<=k;j++,x++)
          {   a[i][j]=x;
          val[x]=1;
           }l=1;
          for(i=1;i<=n;i++)
          for(j=k+1;j<=n;j++)
          {for(l;l<=n*n;l++)
          if(val[l]==0)
          {val[l]=1;
          a[i][j]=l;
           break;
          }
          }
         // afis();
          return ;
}
           if(w==3 || w==2)
     {
             for(i=1;i<=k;i++)
          {  a[1][i]=i+1;
          val[i+1]=1;
          }
            a[2][1]=1;
            val[1]=1;
           for(i=k+2,j=2;j<=k;i++,j++)
           {  a[2][j]=i;
           val[i]=1;
           }
           for(i=3;i<=n;i++)
           {
                            a[i][1]=a[i-1][k]+2;
                            val[a[i][1]]=1;
                            for(j=2;j<=k;j++)
                           { a[i][j]=a[i][j-1]+1;
                           val[a[i][j]]=1;
                            }
                            }
                            l=1;
         for(i=1;i<=n;i++)
         for(j=k+1;j<=n;j++)
         {
                            for(l;l<=n*n;l++)
                            if(val[l]==0)
                            {val[l]=1;
                            a[i][j]=l;
                            break;
                            }}
        //   afis();
           return ;
           }
                  
}
int main ()
{
    freopen("tablete.in","r",stdin);
    freopen("tablete.out","w",stdout);
    int o=1;
    scanf("%d%d",&n,&k);
    if(n%2==0 && k%2==0)
    fill(1);
    else
    if(n%2==1 && k%2==0)
    fill(2);
    else
    fill(3);
    if(n%2 && k%2 && n==k)
    {
        for(i=n;i>2;i--)
        {for(k=n;k>=1;k--)
        a[n][k]=a[n][k-1];
     } 
     
     for(i=1;i<=n-2;i++)
     for(k=1;k<=n*n;k++)  
     if(val[k]==0)
     {a[n][i]=k;
     val[k]=1;
     break;
}
   }
    afis();
return 0;
}