1 条题解

  • 0
    @ 2024-8-2 16:19:45

    C++ :

    #include <bits/stdc++.h>
    using namespace std;
    
    const int N = 10010;
    int num[N], len[N]; // 总长度
    int a[N], b[N], c[N]; // ABCD 的数量
    int n;
    string s;
    
    int main() {
        cin >> n;
    
        for (int i = 1; i <= n; i++) {
            cin >> s;
    
            // 计算 abcd 的数量
            for (int j = 0; j < s.size(); j++) {
                if (s[j] == 'A')
                    a[i]++;
                else if (s[j] == 'B')
                    b[i]++;
                else if (s[j] == 'C')
                    c[i]++;
            }
    
            len[i] = s.size();
            num[i] = i;
        }
    
        // 排序
        for (int i = 1; i <= n - 1; i++) {
            for (int j = 1; j <= n - i; j++) {
                // 按的占比排,A相等按 B,B相等按C,c相等按长度,长度相等按编号升序
                if (a[j] * len[j + 1] < a[j + 1] * len[j] ||
                    (a[j] * len[j + 1] == a[j + 1] * len[j] && b[j] * len[j + 1] < b[j + 1] * len[j]) ||
                    (a[j] * len[j + 1] == a[j + 1] * len[j] && b[j] * len[j + 1] == b[j + 1] * len[j] && c[j] * len[j + 1] < c[j + 1] * len[j]) ||
                    (a[j] * len[j + 1] == a[j + 1] * len[j] && b[j] * len[j + 1] == b[j + 1] * len[j] && c[j] * len[j + 1] == c[j + 1] * len[j] && len[j] < len[j + 1]) ||
                    (a[j] * len[j + 1] == a[j + 1] * len[j] && b[j] * len[j + 1] == b[j + 1] * len[j] && c[j] * len[j + 1] == c[j + 1] * len[j] && len[j] == len[j + 1] && num[j] > num[j + 1])) {
                    swap(a[j], a[j + 1]);
                    swap(b[j], b[j + 1]);
                    swap(c[j], c[j + 1]);
                    swap(len[j], len[j + 1]);
                    swap(num[j], num[j + 1]);
                }
            }
        }
    
        for (int i = 1; i <= n; i++) {
            cout << num[i] << " ";
        }
    
        return 0;
    }
    
    
    • 1

    信息

    ID
    1023
    时间
    1000ms
    内存
    128MiB
    难度
    10
    标签
    递交数
    3
    已通过
    3
    上传者