Cod sursa(job #1045883)

Utilizator vlad.florescu94FMI Florescu Vlad - Adrian vlad.florescu94 Data 2 decembrie 2013 11:11:06
Problema Order Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.88 kb
#include<fstream>
#include<algorithm>
#include<cmath>
using namespace std;
ifstream f("order.in");
ofstream g("order.out");
int v[30001],bat[200],i,j,n,rad,nr,aux,term,red;
int main()
{
    f>>n;
    rad=sqrt(n);
    nr=n/rad;
    for(i=1;i<=n;i++)
        v[i]=i;
    for(i=1;i<=nr;i++)
       bat[i]=rad;
    aux=nr*rad;
    if(aux!=n)
       bat[++nr]=n-aux;
  //  for(i=1;i<=nr;i++)
   //     g<<bat[i]<<" ";
   // g<<"jghep"<<'\n';
    i=0;j=0;
    while(j<n)
      {
        j++;
        term=1;
        if(j==1)
            term--;
        while(term<=j)
        {
         term++;i++;
         if(i>n)
          {
            i-=n;//g<<"jniup";
          }
 //////////////////////////////////   Nu mai aliniem
              aux=(i-1)/rad+1;
              if(v[i]!=-1)
                {if(term==j+1)
                  {
                  g<<v[i]<<" ";
                  v[i]=-1;
                  bat[aux]--;
                  }
                }
              else
                {

                  while(!(bat[aux]))
                    {aux++;
                     if(aux>nr)
                        aux-=nr;
                //     g<<"bat "<<bat[aux];
                     i=rad*(aux-1)+1;
                    }
               //   red=v[i];
                  while(v[i]==-1&&i<=n)
                    i++;//g<<"aici?";}
          //        if(red==-1)
            //        i--;
                  if(i>n)
                    i-=n;
                  while(v[i]==-1)
                    i++;
                  if(term==j+1)
                    {g<<v[i]<<" ";
                      v[i]=-1;
                     bat[aux]--;
                    }
                }
       //g<<'\n'<<v[i]<<'\n';

        }
/////////////////////////////////    Nu mai aliniem
  //     g<<"JAP "<<'\n';
      }
   f.close();g.close();
   return 0;
}