这个题目先开始一直没有好的想法。
题目也是看了很久才看懂
师姐先开始的想法很好但是我没有去做。
最后兜了很大一个圈子还是回到了以前的想法
就是模拟的去建一个数然后给每个位置标号没上成一层就加1
然后再从树根上往下扫一遍。然后树根为1每个位置往下的时候加一
然后这个排序就可以了
最后这个题代码由敏哥完成了
1#include<stdio.h>
2#include<algorithm>
3using namespace std;
4
5struct nn
6{
7 int dp,m,mark;
8}pt[10010];
9
10int len,t;
11char str[11000];
12
13void di(int deep)
14{
15 pt[t].dp = deep;
16 pt[t].m = str[len];
17 pt[t++].mark = t;
18 if(str[len] >= 'A' && str[len] <= 'Z')
19 {
20 len--;
21 di(deep+1);
22 di(deep+1);
23 return;
24 }
25 if(str[len] >= 'a' && str[len] <= 'z')
26 {
27 len--;
28 return;
29 }
30}
31
32int cmp(nn a, nn b)
33{
34 if(a.dp != b.dp)
35 return a.dp > b.dp;
36 else
37 return a.mark < b.mark;
38}
39
40int main()
41{
42 int n,i;
43 scanf("%d", &n);
44 while(n--)
45 {
46 scanf("%s",str);
47 len = strlen(str)-1;
48 t = 0;
49 di(0);
50 sort(pt,pt+t,cmp);
51 for(i = 0; i < t; i++)
52 printf("%c",pt[i].m);
53 printf("\n");
54 }
55 return 0;
56}
57
58