1 条题解

  • 0
    @ 2025-2-12 16:49:39

    归并排序:

    #include <bits/stdc++.h>
    using namespace std;
    
    // 归并排序的合并函数
    void merge(vector<string>& arr, int left, int mid, int right) {
        int n1 = mid - left + 1;  // 左半部分的大小
        int n2 = right - mid;     // 右半部分的大小
    
        vector<string> leftArr(n1), rightArr(n2);
    
        // 将数据拷贝到临时数组
        for (int i = 0; i < n1; i++) {
            leftArr[i] = arr[left + i];
        }
        for (int i = 0; i < n2; i++) {
            rightArr[i] = arr[mid + 1 + i];
        }
    
        // 合并两个临时数组
        int i = 0, j = 0, k = left;
        while (i < n1 && j < n2) {
            if (leftArr[i] < rightArr[j]) {
                arr[k++] = leftArr[i++];
            } else {
                arr[k++] = rightArr[j++];
            }
        }
    
        // 拷贝剩余的元素
        while (i < n1) {
            arr[k++] = leftArr[i++];
        }
        while (j < n2) {
            arr[k++] = rightArr[j++];
        }
    }
    
    // 归并排序的递归函数
    void mergeSort(vector<string>& arr, int left, int right) {
        if (left < right) {
            int mid = left + (right - left) / 2;  // 计算中间位置
    
            // 递归排序左右两部分
            mergeSort(arr, left, mid);
            mergeSort(arr, mid + 1, right);
    
            // 合并两个已排序的部分
            merge(arr, left, mid, right);
        }
    }
    
    int main() {
        string input;
        getline(cin, input);  // 读取整行输入
    
        set<string> uniqueWords;  // 使用 set 去重
    
        stringstream ss(input);
        string word;
        while (ss >> word) {
            uniqueWords.insert(word);  // 将单词加入 set 中,自动去重
        }
    
        // 将去重后的单词存入 vector
        vector<string> words(uniqueWords.begin(), uniqueWords.end());
    
        // 对去重后的单词进行归并排序
        mergeSort(words, 0, words.size() - 1);
    
        // 输出排序后的单词
        for (const string& w : words) {
            cout << w << endl;
        }
    
        return 0;
    }
    
    
    • 1

    信息

    ID
    1130
    时间
    1000ms
    内存
    256MiB
    难度
    9
    标签
    递交数
    11
    已通过
    6
    上传者