2012-06-30 3 views
-2

как сортировать очень большие числа, каккак сортировать очень большие числа

03 10103538 2222 1233 6160 0142 
03 10103538 2222 1233 6160 0141 
30 10103538 2222 1233 6160 0141 
30 10103538 2222 1233 6160 0142 
30 10103538 2222 1233 6160 0141 
30 10103538 2222 1233 6160 0142 

в C

+2

Не могли бы вы подробнее рассказать о вопросе? С чем вы столкнулись? Что вы хотите, чтобы выход был? – matzahboy

+3

Как вы храните цифры? Или ты еще не справился? –

+0

Я просто хочу, чтобы все шесть строк были в порядке возрастания (т. Е.) Сортировать шесть строк. – yuvanesh

ответ

0

Это тот же SPOJ Question http://www.spoj.pl/problems/SBANK/

Вы можете решить эту проблему с Radix sort или просто по Binary Search Tree (я сделал это так).

Вот как вы будете делать в C++ (реализовать свой собственный std::map/std::set/binary search tree в C)

map<string,int> tab; 
    map<string,int>::iterator it; 
    char acc[40]; 
    int n; 
    scanf("%d\n",&n); 
    for(int i=0;i<n;i++) 
    { 
     gets(acc); 
     tab[acc]++; 
    } 
    for(it=tab.begin();it!=tab.end();it++) 
    { 
     printf("%s %d\n",it->first.c_str(),it->second); 
    } 
    printf("\n"); 

Моя Вышеупомянутая программа также выводит количество равных чисел, которые я не думаю, что указано в вашем вопросе. Таким образом, в этом случае также будет работать простой std :: set или прямое двоичное дерево поиска. Хотя в вышеупомянутом вопросе я мог бы легко решить с std :: set вместо std :: map.

+0

Вы также можете попасть в библиотеку bigint, как GNU GMP :) –

+0

поблагодарить так много :) – yuvanesh

+0

@ H2CO3 Это тоже решение, но я сомневаюсь, что это будет эффективно. Как и в этом вопросе SPOJ, я использовал мою библиотеку bigint, и мое решение превысило лимит времени. – nims

Смежные вопросы