1 条题解

  • 0
    @ 2025-4-15 19:22:21

    算法标签:

    模拟

    题解:

    按照题意模拟一下

    #include <iostream>
    #include <cstring>
    using namespace std;
    
    void change(char s1[100], int l, int k, char s[100]) {
        for (int i = 0; i < l; i++) {
            s[(i + k) % l] = s1[i];
        }
    }
    
    int main() {
        int k1, k2, k3, p[100];
        char s[100], ans[3][100], res[3][100];
        while (cin >> k1 >> k2 >> k3 && (k1 || k2 || k3)) {
            cin >> s;
            int l = strlen(s);
            int l1 = 0, l2 = 0, l3 = 0, i;
    
            for (i = 0; i < l; i++) {
                if (s[i] >= 'a' && s[i] <= 'i') {
                    p[i] = 0;
                    ans[0][l1++] = s[i];
                } else if (s[i] >= 'j' && s[i] <= 'r') {
                    p[i] = 1;
                    ans[1][l2++] = s[i];
                } else {
                    p[i] = 2;
                    ans[2][l3++] = s[i];
                }
            }
    
            if (l1) k1 %= l1;
            if (l2) k2 %= l2;
            if (l3) k3 %= l3;
            change(ans[0], l1, k1, res[0]);
            change(ans[1], l2, k2, res[1]);
            change(ans[2], l3, k3, res[2]);
            k1 = k2 = k3 = 0;
    
            for (i = 0; i < l; i++) {
                if (p[i] == 0) {
                    cout << res[0][k1++];
                } else if (p[i] == 1) {
                    cout << res[1][k2++];
                } else {
                    cout << res[2][k3++];
                }
            }
            cout << endl;
        }
        return 0;
    }
    
    • 1

    信息

    ID
    108
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    1
    已通过
    1
    上传者