AOJ 0546 - Lining up the cards
C++11でto_string関数をつかいました.
逆に文字列を数値にする関数はstoi(int型に), stoll(long long型に), stof(float型に), stod(double型に)があります.
文字列の重複を調べるのが面倒だったのでmapを使いました.
#include<iostream> #include<map> #include<string> int n, k; std::string a[10]; std::map<std::string, int> m; void rec(int i, int S, std::string str){//i個選んで今strという文字列ができている(Sは選んだものの集合) if(i == k){ m[str]++; return; } for(int j=0;j<n;j++){ if(!(S >> j & 1)){//使っていない rec(i + 1, S | (1 << j), str + a[j]); } } } int main(){ while(std::cin >> n >> k, n){ m.clear(); for(int i=0;i<n;i++){ int j; std::cin >> j; a[i] = std::to_string(j); } rec(0, 0, ""); std::cout << m.size() << std::endl; } }