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;
	}
}