提交代码1(60分)

第一次模拟写的,只能过60 %, 没找到哪里的问题

#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;

int main()
{
    string s;
    int p1, p2, p3;
    cin >> p1 >> p2 >> p3;

    cin >> s;
    auto get = [&](int p1, int p2, int p3)
    {
        int n = s.length();
        for (int i = 1; i < n - 1; i++)
        {
            if (s[i] != '-')
                continue;
            string ss = "";
            char bf = s[i - 1], nt = s[i + 1];
            if (bf >= nt)
                continue;
            if (isdigit(bf) && isdigit(nt))
                ;
            else if (isalpha(bf) && isalpha(nt))
            {
                if (p1 == 1)
                    bf = tolower(bf), nt = tolower(nt);
                else if (p1 == 2)
                    bf = toupper(bf), nt = toupper(nt);
            }
            else
                continue;

            for (int num = bf + 1; num <= nt - 1; num++)
                for (int t = 1; t <= p2; t++)
                {
                    char ch = num;
                    if (p1 == 3)
                        ch = '*';
                    ss.push_back(ch);
                }
            if (p3 == 2)
                reverse(ss.begin(), ss.end());
            s.erase(i, 1);
            s.insert(i, ss);
        }
    };
    get(p1, p2, p3);
    cout << s;
    return 0;
}

提交代码2

后面直接输出了, 我就没插入, 想了下, 插入可能还会慢一点, 遇到 - 不输出就行了

#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
const int inf = INT_MAX;
typedef pair<int, int> pii;
typedef priority_queue<int, vector<int>, greater<int>> small_heap;
#define int long long
string s, ans;
char ch1, ch2;
bool judge(int i)
{
    if (isdigit(s[i - 1]) && isdigit(s[i + 1]))
        return 1;
    if (isalpha(s[i - 1]) && isalpha(s[i + 1]))
        return 1;
    return 0;
}
int32_t main()
{
    int p1, p2, p3, tips;
    cin >> p1 >> p2 >> p3;
    cin >> s;
    int n = s.length();
    for (int i = 0; i < n; i++)
    {
        if (s[i] == '-' && s[i - 1] < s[i + 1] && judge(i))
        {
            ans = "";
            ch1 = s[i - 1], ch2 = s[i + 1];
            for (tips = 1; ch1 + tips < ch2; tips++)
            {
                if (p1 == 1)
                    for (int i = 1; i <= p2; i++)
                        ans += (ch1 + tips);
                else if (p1 == 2)
                    for (int i = 1; i <= p2; i++)
                        ans += toupper(ch1 + tips);
                else if (p1 == 3)
                    for (int i = 1; i <= p2; i++)
                        ans += "*";
            }
            if (2 == p3 ) reverse(ans.begin() , ans.end());
            cout << ans;   
        }
        else cout << s[i];
    }
    return 0;
}

加油, 再接再厉