Pagini recente » Cod sursa (job #955427) | Cod sursa (job #2483444) | Cod sursa (job #1213677) | Cod sursa (job #3356268) | Cod sursa (job #1041359)
//
// main.cpp
// order
//
// Created by Catalina Brinza on 11/19/13.
// Copyright (c) 2013 Catalina Brinza. All rights reserved.
//
#include <fstream>
#include <math.h>
using namespace std;
ifstream f("order.in");
ofstream g("order.out");
int main()
{int n,k,i,m,j,l,p=0;
f>>n;
int s[175];
bool a[30001];
k=sqrt(n);
if (k*k==n) {p=k;s[p]=k;}
else if (n%k==0) {p=n/k; s[p]=n-(p-1)*k;}
else {p=n/k+1;s[p]=n%k;}
for (i=1;i<=p-1;++i) s[i]=k;
for (i=1;i<=n;++i) a[i]=false;
m=n;
j=2;
i=1;
while (m!=0)
{
a[j]=true;
g<<j<<' ';
m--;
if (m==0) break;
i++;
int q=j/k+1;
if (j%k==0) q--;
s[q]--;
int nr=i, poz=j;
for (l=j+1;l<q*k+1 && l<=n;++l)
if (!a[l]) {poz=l; nr--; if (nr==0) break;}
if (nr==0) {j=poz;}
else {
while (nr>0)
{
q++;
while (s[q]==0)
{q++;
if (q>p) q=1;}
if (q>p) q=1;
nr-=s[q];
}
if (nr==0)
{
if (q==p)
{for (l=n;l>(q-1)*k;l--)
if (!a[l]) { j=l; break;}}
else for (l=q*k;l>0;--l)
if (!a[l]) { j=l; break;}
}
else
{
nr=abs(nr);
for (l=q*k;l>0;--l)
{
if (!a[l]) nr--;
if (nr==-1) {j=l;break;}
}}
}
}
return 0;
}