Cod sursa(job #1039736)

Utilizator Dayanna000Amegica Dayanna Dayanna000 Data 23 noiembrie 2013 15:50:53
Problema Order Scor 85
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.72 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;
}