# 题解:AT_guildfes_2026_final_d EGFイニシャル**[AtCoder 题目传送门](https://atcoder.jp/contests/guildfes-2026-final/tasks/guildfes_2026_final_d)** & **[洛谷题目传送门](https://www.luogu.com.cn/problem/AT_guildfes_2026_final_d)**## 题意给 $N$ 个只含小写字母的字符串,每个串长度不同。把它们按长度从大到小排好序,取出每个串的第一个字母,转成大写后拼在一起输出。## 思路因为 $N$ 最多只有 $10$,字符串长度也不超过 $10$,所以直接按题目说的做就行。主要就两步:
1. 把字符串按长度从大到小排序。
2. 依次取每个字符串第一个字符,用 `toupper`(注意函数返回的是整型)转大写,然后输出。题目保证了长度互不相同,所以不用担心长度相等时怎么排的问题。## 代码```cpp
#include
#define Jason227 return
#define Code 0
using namespace std;int N;
string S[20];bool cmp(string x, string y){return x.size() > y.size();
}int main(){cin >> N;for(int i = 1; i <= N; i++){cin >> S[i];}sort(S + 1, S + N + 1, cmp);for(int i = 1; i <= N; i++){cout << char(toupper(S[i][0]));}cout << '
';Jason227 Code;
}
```## 复杂度分析- **时间复杂度**:排序 $O(N \log N)$,但这里 $N \le 10$,所以实际就是 $O(1)$。
- **空间复杂度**:存了 $N$ 个字符串,$O(\sum |S_i|)$,也很小。**[AC 记录](https://atcoder.jp/contests/guildfes-2026-final/submissions/75574497)**