1 条题解

  • 0
    @ 2026-10-26 10:13:15

    思路与算法

    读入n后先消费该行换行,再逐行读入n个国家名,保存到string数组。使用sort按字符串字典序升序排序,依次每行输出一个名称。比较不擅自改变字母大小写,也不删除重复名称。

    正确性说明

    string的字典序先比较首个不同位置的字符,公共前缀完全相同时较短串在前,正是本题按字母顺序排序的比较规则。sort使任意前项不大于后项,并保持元素的多重集合,因此所有输入国家名都按要求排序输出,不遗漏或增加名称。

    复杂度

    令最大名称长度为L,读入和输出O(nL),排序做O(n log n)次比较,每次最坏O(L),总时间O(nL log(n+1))。保存名称O(nL),sort内部另需O(log n)栈空间。数组初始化O(n)包含在上述界内;n和L都不超过20。

    易错点

    这是字符串字典序,不按长度优先或反向排序。前缀短串在前。名称逐行输出,不合成一行。n=1无需改变;相同名称仍保留。本题未授权忽略大小写,不做大小写归一化。

    参考代码(C++11)

    #include <algorithm>
    #include <iostream>
    #include <string>
    #include <vector>
    using namespace std;
    int main() {
        int n;
        cin >> n;
        string line;
        getline(cin, line);
        vector<string> countries(n);
        for (string &s : countries)
            getline(cin, s);
        sort(countries.begin(), countries.end());
        for (const string &s : countries)
            cout << s << '\n';
    }
    
    • 1

    信息

    ID
    1700
    时间
    1000ms
    内存
    64MiB
    难度
    进阶
    标签
    递交数
    1
    已通过
    1
    上传者