Cod sursa(job #1312924)

Utilizator OnimushaLordTiberiu Copaciu OnimushaLord Data 10 ianuarie 2015 10:16:12
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.16 kb
# include <cstdio>
# include <vector>
# define N 500010
# define pb push_back
# define DIM (1<<16)

using namespace std;

int poz,n;
int a[N];
char buff[DIM];

vector <int> G[10];

void citeste(int &numar)
{
     numar = 0;

     while (buff[poz] < '0' || buff[poz] > '9')

          if (++poz == DIM)
               fread(buff,1,DIM,stdin),poz=0;

      while ('0'<=buff[poz] && buff[poz]<='9')
     {
          numar = numar*10 + buff[poz] - '0';
          if (++poz == DIM)
               fread(buff,1,DIM,stdin),poz=0;
     }
}

int main()
{
    freopen("algsort.in", "r", stdin);
    freopen("algsort.out", "w", stdout);

    citeste(n);
    for(int i=0; i<n; ++i, citeste(a[i]));

    int div=1;
    for(int i=1; i<=10; ++i)
    {
        a[0]=0;
        for(int j=0; j<10; ++j)
            G[j].clear();
        for(int j=1; j<=n; ++j)
        {
            int list=a[j]/div%10;
            G[list].pb(a[j]);
        }
        for(int j=0; j<=10; ++j)
            for(int q=0; q<G[j].size(); ++q)
                a[++a[0]]=G[j][q];
        div*=10;
    }
    for(int i=1; i<=a[0]; ++i)
        printf("%d ", a[i]);
}