[uva] 10098 - Generating Fast

http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=107&page=show_problem&problem=1039

可重复子集生成问题, 看不懂题意的沙茶各种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 }

 

posted @ 2013-12-06 01:53  NextLife  阅读(255)  评论(0)    收藏  举报