-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で

4

1 に答える 1

0

これは同様の SPOJ の質問です 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::map の代わりに std::set を使用すると簡単に解決できました。

于 2012-06-30T07:10:02.677 に答える