範例程�碼 uva12335
//uva12335
#include <iostream>
#include <string>
#include <cstring>
#define LEN 21
using namespace std;
int main() {
int dataNum; // dataNum = ÃD¥Ø¤¤ªº T
long long int k, factorial[LEN];
string s;
char *ans;
// pºâ i ¶¥¼h - factorial[i] = i!
factorial[0] = 1;
for(int i = 1; i < LEN; i++)
factorial[i] = factorial[i - 1] * i;
cin >> dataNum; // ¨ú±o data ¼Æ (§Y T È)
for(int d = 0; d < dataNum; d++) {
cin >> s >> k; // ¨ú±o´ú¸ê (§Y s, k)
// initialize
ans = new char [s.length() + 1];
memset(ans, '-', sizeof(char) * s.length());
ans[s.length()] = '\0';
for(int i = 0; i < s.length(); i++) {
long long int stage; // ¥h±¼¤wª¾²Å¸¹«áªº²Ä´XÓ¦ì¸m
int place = 0; // ²Ä´XÓ¦ì¸m
// §Q¥Î¤À°Ïpºâ s[i] ªº¦ì¸m (¤£§t¤w¦³²Å¸¹ªº¦ì¸m)
stage = k / factorial[s.length() - i - 1];
if(k % factorial[s.length() - i - 1] == 0)
stage--;
// §Q¥Î stage §ä¥X s[i] ¦b ans ¤¤ªº¦ì¸m
for(int count = 0; count <= stage; place++) {
if(ans[place] != '-')
continue;
count++;
}
ans[place - 1] = s[i];
// ×¥¿ k È¥H¶i¦æ¤UÓ´`Àô
k = k % factorial[s.length() - i - 1];
if(k == 0)
k = factorial[s.length() - i - 1];
}
cout << "Case " << d + 1 << ": " << ans << endl;
delete [] ans;
}
return 0;
}