文章

5

粉丝

0

获赞

17

访问

632

头像
查找 - 北邮 题解:WA50%求解
P1387 北京邮电大学
发布于2025年3月18日 16:48
阅读数 142

#include <bits/stdc++.h>
#include <algorithm>
using namespace std;
void oper_0(string &a,int x,int y)
{
    for(int i=x;i<=(x+y-1)/2;i++)
    {
        char temp=a[i];
        a[i]=a[x+y-i-1];
        a[x+y-i-1]=temp;
        //cout<<a[i]<<' ';
    }
}
void oper_1(string &a,int x,int y,string b)
{
    int ans=0;
    string s;
    s=a.substr(0,x);
    s=s+b;
    s=s+a.substr(x+y,a.size()-x-y);
    //cout<<s<<endl;
    a=s;
}
int main()
{
    int n;
    string s;
    while(cin>>s)
    {
        cin>>n;
        for(int i=0;i<n;i++)
        {
            string k;
    &nb...

登录查看完整内容


登录后发布评论

2 条评论
快乐小土狗
2025年3月18日 17:29

oper_0 函数里的翻转逻辑存在问题。当 x 并非 0 时,循环内交换字符的索引计算有误,致使部分字符串未正确翻转。

在 oper_1 函数里,当使用 substr 函数获取后半部分字符串时,其第二个参数的使用有误。substr 函数的第二个参数代表要截取的字符数量,并非结束位置。所以,你需要把 a.substr(x + y, a.size() - x - y) 改成 a.substr(x + y),这样就能从 x + y 位置开始截取到字符串末尾。

修正后代码

#include <bits/stdc++.h>
#include <algorithm>
using namespace std;

// 翻转函数
void oper_0(string &a, int x, int y) {
    int left = x;
    int right = x + y - 1;
    while (left < right) {
        swap(a[left], a[right]);
        left++;
        right--;
    }
}

// 替换函数
void oper_1(string &a, int x, int y, string b) {
    string s;
    s = a.substr(0, x);
    s = s + b;
    s = s + a.substr(x + y);
    a = s;
}

int main() {
    int n;
    string s;
    while (cin >> s) {
        cin >> n;
        for (int i = 0; i < n; i++) {
            string k;
            cin >> k;
            if (k[0] == '0') {
                oper_0(s, k[1] - '0', k[2] - '0');
                cout << s << endl;
            }
            if (k[0] == '1') {
                oper_1(s, k[1] - '0', k[2] - '0', k.substr(3, k.size() - 3));
                cout << s << endl;
            }
        }
    }
    return 0;
}   

 

赞(1)

爱学习的小妞 : 回复 快乐小土狗: 感谢大佬!!!

2025年3月21日 14:34