のような非常に大きな数をソートする方法
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で
のような非常に大きな数をソートする方法
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で
これは同様の 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 を使用すると簡単に解決できました。