构造字符串的一个模板
也是比赛时候的一道题目, 但是这么构造,超时,
不过也是一个构造字符串的好的程序。贴一下模板的吧
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 }