1 条题解

  • 0
    @ 2025-9-6 13:38:22

    C++ :

    #include <iostream>
    #include <algorithm>
    #include <string>
    #include <vector>
     
    using namespace std;
     
    // 检查字符串是否为非降序排列
    bool is_Valid(const string &s) {
        for (int i = 0; i < s.size() - 1; i++) {
            if (s[i] > s[i + 1]) {
                return false;
            }
        }
        return true;
    }
     
    // 排序规则:首字符升序,次尾字符升序
    bool compare(const string &a, const string &b) {
        if (a[0] != b[0]) {
            return a[0] < b[0]; // 首字符升序
        } else {
            return a.back() < b.back(); // 尾字符升序(首字符相同)
        }
    }
     
    int main() {
        int T;
        cin >> T;
        for (int i = 0; i < T; i++) {
            int n;
            cin >> n;
            vector<string> A(n);
            bool valid = true;
            
            // 读取并检查字符串有效性
            for (int j = 0; j < n; j++) {
                cin >> A[j];
                if (!is_Valid(A[j])) {
                    valid = false;
                }
            }
            
            if (!valid) {
                cout << 0 << endl;
                continue; // 存在无效字符串,跳过后续处理
            }
            
            sort(A.begin(), A.end(), compare); // 按规则排序
            
            // 检查相邻字符串的尾首条件
            bool flag = true;
            for (int j = 0; j < n - 1; j++) {
                if (A[j].back() > A[j + 1][0]) {
                    flag = false;
                    break;
                }
            }
            
            cout << (flag ? 1 : 0) << endl;
        }
        return 0;
    }
    

    信息

    ID
    5525
    时间
    1000ms
    内存
    128MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者