[uva] 10098 - Generating Fast
可重复子集生成问题, 看不懂题意的沙茶各种wa
1 // 2 // main.cpp 3 // uva10098 4 // 5 // Created by ello on 12/5/13. 6 // Copyright (c) 2013 NextLife. All rights reserved. 7 // 8 9 #include <cstdio> 10 #include <string> 11 #include <algorithm> 12 #include <cstring> 13 14 using namespace std; 15 string sortline; 16 string re; 17 void solve(int cur) { 18 if (cur == sortline.size()) { 19 puts(re.c_str()); 20 return; 21 } 22 for (unsigned int i = 0; i < sortline.size(); ++i) if (!i || sortline[i] != sortline[i - 1]) { 23 string sub = re.substr(0, cur); 24 int cnt1 = (int)count(sub.begin(), sub.end(), sortline[i]); 25 int cnt2 = (int)count(sortline.begin(), sortline.end(), sortline[i]); 26 if (cnt1 < cnt2) { 27 re[cur] = sortline[i]; 28 solve(cur + 1); 29 } 30 } 31 } 32 33 int main(int argc, const char * argv[]) 34 { 35 int n = 0; 36 scanf("%d\n", &n); 37 for (int i = 0; i < n; ++i) { 38 char str[20] = {0}; 39 gets(str); 40 re = sortline = str; 41 sort(sortline.begin(), sortline.end()); 42 solve(0); 43 puts(""); 44 } 45 return 0; 46 }