Pagini recente » Istoria paginii runda/simulare_003/clasament | Istoria paginii runda/ghhhh | Cod sursa (job #1191040) | Cod sursa (job #164086) | Cod sursa (job #1039736)
#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;
}