Cod sursa(job #238441)

Utilizator alexandru92alexandru alexandru92 Data 2 ianuarie 2009 10:34:41
Problema Tablete Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 kb
#include<stdio.h>
#define InFile "tablete.in"
#define OutFile "tablete.out"
#define Nmax 1000
int n,k,uz[Nmax*Nmax];
long a[Nmax][Nmax],nr,nr2;
int main()
  {
   FILE *fin=freopen(InFile,"rt",stdin),*fout=freopen(OutFile,"wt",stdout);
   scanf("%ld %ld",&n,&k);
   fclose(fin);
   int  i,j,ok;
   for(i=1;i<=n;i++)
      {ok=1; nr=(i*k%2==0)?(i*k):(i*k+1);
       do
        {if(!ok) nr+=2;
         ok=1;
         if(uz[nr]) while(uz[nr]) nr+=2;
         a[i][k]=nr; uz[nr]=1;  ;
         for(j=k-1;j>=1&&ok;j--)
            {nr2=a[i][j+1]-(k-j);
             if(uz[nr2]) while(uz[nr2]) nr2--;
               else {a[i][j]=nr2; uz[nr2]=1;}
             if(nr<=1&&j>1) ok=0;
               else {a[i][j]=nr2; uz[nr2]=1;}
            }
         }while(ok==0);
       }
   for(i=1;i<=n;i++)
      {ok=1;nr=0;
       for(j=1;j<=k;j++) printf("%ld ",a[i][j]);
       for(j=i*k;j<=n*n&&ok;j++)
          {if(!uz[j]) {printf("%ld ",j);nr++; uz[j]=1;}
           if(nr==n-k) ok=0;
          }
       printf("\n");
      }
   fclose(fout);
   return 0;
  }