Cod sursa(job #1022020)

Utilizator WyvernFMI Stanescu Leonard Wyvern Data 4 noiembrie 2013 17:18:58
Problema Sortare prin comparare Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.44 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream fi("algsort.in");
ofstream fo("algsort.out");
struct valori {
int nr,c;};
valori m[500002][10],x[500002][10];
int n,k;
bool ok;

int main()
{
    fi>>n;
    for (int i=1;i<=n;i++) {
        int j=1;
        fi>>k;
        while (m[j][k % 10].nr!=0)
            j++;
        m[j][k % 10].nr=k;
        m[j][k % 10].c=k;
    }
    while (ok==0) {
        ok=1;
        for (int j=0;j<=10;j++) {
            int i=1;
            while (x[i][j].nr!=0) {
                x[i][j].nr=0;
                x[i][j].c=0;
                i++;
            }
        }
        for (int j=0;j<=9;j++) {
            int i=1;
            while (m[i][j].nr!=0) {
                if (m[i][j].c>0)
                    ok=0;
                k=1;
                while (x[k][m[i][j].c % 10].nr!=0)
                    k++;
                x[k][m[i][j].c % 10].nr=m[i][j].nr;
                x[k][m[i][j].c % 10].c=m[i][j].c/10;
                m[i][j].nr=0;
                m[i][j].c=0;
                i++;
            }
        }
        for (int j=0;j<=10;j++) {
            int i=1;
            while (x[i][j].nr!=0) {
                m[i][j]=x[i][j];
                i++;
            }
        }
    }
    for (int j=0;j<=10;j++) {
        int i=0;
        while (m[i][j].nr!=0) {
            fo<<m[i][j].nr<<' ';
            i++;
        }
    }
    return 0;
}