Pagini recente » Cod sursa (job #2069813) | Cod sursa (job #3037580) | Cod sursa (job #148083) | Cod sursa (job #1859780) | Cod sursa (job #651615)
Cod sursa(job #651615)
#include <fstream>
#include <iostream>
#include <cmath>
using namespace std;
ifstream f("sdo.in");
ofstream g("sdo.out");
int v[3000000],n,k,i,leg[3000000];
int m,cap=0,maxi,a;
void radix_sort()
{
int p[100],u[100];
int i,j,k,l,d=1;
//golim cozi
for (i=0;i<n;i++)
leg[i]=i+1;
//facem de m ori distribuirea
for (i=1;i<=m;i++)
{
for (j=0;j<100;j++)
p[j]=u[j]=-1;
l=cap;
for (j=0;j<n;j++)
{
k=(v[l]/d)%100;//sa incerc cu o var globala
if (p[k]==-1) p[k]=u[k]=l;
else
{
leg[u[k]]=l;u[k]=l;//5 3 6 8 1 6 8 3 48 999
}
l=leg[l];
}
//leg cozi
j=0;
while (p[j]==-1)
j++;
cap=p[j];
while (j<9)
{
for (k=j+1;k<100;k++)
if (p[k]!=-1)
{//fac legatura
leg[u[j]]=p[k];
break;
}
j=k;
}
d=d*100;
}
}
int nr_cif(double n)
{
return (int)(floor(log10(n))/2+1);
}
int main()
{
f>>n;f>>k;
for (i=0;i<n;i++)
{
f>>v[i];
if (v[i]>maxi) maxi=v[i];
}
m=nr_cif(maxi);
radix_sort();
a=cap;
for (i=2;i<=k;i++)
a=leg[a];
g<<v[a];
return 0;
}