构造字符串的一个模板

也是比赛时候的一道题目, 但是这么构造,超时,

不过也是一个构造字符串的好的程序。贴一下模板的吧

 

s[]数组,刚开始是 输入一个字符串,get()函数的作用是 按照字典序,依次构造这个字符串,并存储在s[]数组中.

直到所有的字符串构造 完成。

 1 #include <iostream>
 2 #include <stdio.h>
 3 #include <string.h>
 4 #include <string>
 5 #include <algorithm>
 6 using namespace std;
 7 const int N=1050;
 8 char s[N];
 9 int l;
10 int get()
11 {
12     int i = l-1;
13     while(i>0&&s[i-1]>=s[i])
14     i--;
15     if (!i) return 0;
16     int mp = i;
17     for (int j = i+1;j < l; j++)
18     {
19         if (s[j]<=s[i-1])
20         continue;
21         if (s[j]<s[mp])
22         mp = j;
23     }
24     char ch;
25     ch = s[mp];
26     s[mp] = s[i-1];
27     s[i-1] = ch;
28     sort(s+i,s+l);
29     return 1;
30 
31 }
32 int main()
33 {
34     int n,m;
35     while(~scanf("%d%d",&n,&m))
36     {
37 
38         if(n==0&&m==0)
39         break;
40         int x,cnt = 0;
41         for (int i = 0;i < n; i++)
42         {
43             scanf("%d",&x);
44             while(x--)
45             s[cnt++] = 'a'+i;
46         }
47         s[cnt] = '\0';
48         l = strlen(s);
49         sort(s,s+l);
50         int num = 0;
51         if(m==0)
52         puts(s);
53         else
54         while(get())
55         {
56 
57             if (num==m-1)
58 
59             {
60                 printf("%s\n",s);
61              break;
62             }
63              num++;
64         }
65     }
66     return 0;
67 }

 

posted @ 2014-03-24 19:58  水门  阅读(271)  评论(0编辑  收藏  举报