Cod sursa(job #1039714)

Utilizator Dayanna000Amegica Dayanna Dayanna000 Data 23 noiembrie 2013 14:45:08
Problema Order Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.76 kb
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;
int main()
{
    ifstream f("order.in");
    ofstream g("order.out");
    int n,b[150],s,a[30001],i,k,gal,huh,afis,nr,nrg,poz,numar;
    f>>n;
    for(i=1;i<=n;i++)
      a[i]=i;
    s=(int)sqrt(n);
    nrg=n/s;
    for(i=1;i<=nrg;++i)
      b[i]=s;
    if(nr*s!=n)
      b[nrg]=b[nrg]+n-nrg*s;
    poz=1;
    nr=1;
    afis=0;
    while(afis<n)
      {
          if(poz%s==0)
             gal=poz/s;
             else
             gal=poz/s+1;
          huh=gal*s;
          if(gal>=nrg)
            {gal=nrg;  huh=n;}
          numar=0;
                if(b[gal]>1)
                   {
                    for(i=poz+1;i<=huh;++i)
                      if(numar>=nr)
                         break;
                         else
                      if(a[i]>0)
                         {  numar++;   k=i;  }
                   }
            if(numar<nr)
              {
                  gal++;
                  if(gal>nrg)
                     gal=1;
                  while(b[gal]<nr-numar)
                     {
                         numar=numar+b[gal];
                         gal++;
                         if(gal>nrg)
                           gal=1;
                     }
                  if(gal==nrg)
                     huh=n;
                     else
                     huh=gal*s;
                  for(i=(gal-1)*s+1;i<=huh;++i)
                     if(numar>=nr)
                       break;
                       else
                     if(a[i]>0)
                        {  numar++;  k=i;  }
              }
            g<<a[k]<<"  ";
            a[k]=0;
            b[gal]--;
            poz=k;
            afis++;
            nr++;
      }
    f.close();
    g.close();
    return 0;
}