Cod sursa(job #238480)

Utilizator alexandru92alexandru alexandru92 Data 2 ianuarie 2009 12:25:36
Problema Tablete Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include<fstream.h>
#define InFile "tablete.in"
#define OutFile "tablete.out"
#define Nmax 1001
int n,k,uz[Nmax*Nmax];
long a[Nmax][Nmax],nr,nr2;
int main()
  {
   ifstream fin(InFile);
   ofstream fout(OutFile);
   fin>>n>>k;
   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++) fout<<a[i][j]<<" ";
       for(j=i*k;j<=n*n&&ok;j++)
          {if(!uz[j]) {fout<<j<<" ";nr++; uz[j]=1;}
           if(nr==n-k) ok=0;
          }
       fout<<"\n";
      }
   fout.close(); fin.close();
   return 0;
  }