80分 样例三没过 ,补充后没问题了啊, 还是过不了?
查看原帖
80分 样例三没过 ,补充后没问题了啊, 还是过不了?
341644
un_dauant楼主2023/2/12 18:03

原代码


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

// 若之前cin以换行结束, getline(cin ,s)会先读取空格
// 积累 s.append()  在 s后面加后缀。
// 使用stringstream 将字符串转换为数字, 连续使用时 要加上ss.clear() 和 ss.str() 去清空字符流
int findSubstring(string s , string s1){
    int len = s.length() , len1 = s1.length();
    int i = 0 , j =0 ,k = 0;
    while(i < len && j < len1){
        k = i+1;
        bool flag = false;
        for(int u = 0 ; u  < s1.length() ;u++,i++){
            if(s1[u] != s[i]){
                flag = true;
                i = k;
                break;
            }
        }
        if(!flag) return i-len1;
    }
    return -1;
}
int main(){
    int q , a, b;
    cin >> q;
    string s ,s1;
    cin >> s;
    int option;
    while(q--){
        cin >> option;
        if(option == 1){
            cin >> s1;
            s.append(s1);
            cout << s << "\n";
        }else if(option == 2){
            cin >> a >> b;
            s1 = s;
            s = "";
            for(int i = a ;i < a+b ;i++){
                s+=s1[i];
            }
            cout << s << "\n";
        }else if(option == 3){
            cin >> a >> s1;
            string s2 = "";
            for(int i = a; i < s.length() ;i++){
                s2 += s[i];
            }
            for(int i = a, j =0 ; i< a+s1.length() ;i++,j++){
                s[i] = s1[j];
                if(i>=s.length()) s += s1[j];
            }

            s.append(s2);
            cout << s<<"\n";
        }else if(option == 4){
            cin >> s1;
            bool falg = false;
            cout << findSubstring(s ,s1)<<"\n";
        }

    }
    return 0;
}

补充了一个逻辑


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

// 若之前cin以换行结束, getline(cin ,s)会先读取空格
// 积累 s.append()  在 s后面加后缀。
// 使用stringstream 将字符串转换为数字, 连续使用时 要加上ss.clear() 和 ss.str() 去清空字符流
int findSubstring(string s , string s1){
    int len = s.length() , len1 = s1.length();
    int i = 0 , j =0 ,k = 0;
    while(i < len && j < len1){
        k = i+1;
        bool flag = false;
        for(int u = 0 ; u  < s1.length() ;u++,i++){
            if(s1[u] != s[i]){
                flag = true;
                i = k;
                break;
            }
        }
        if(!flag) return i-len1;
    }
    return -1;
}
int main(){
    int q , a, b;
    cin >> q;
    string s ,s1;
    cin >> s;
    int option;
    while(q--){
        cin >> option;
        if(option == 1){
            cin >> s1;
            s.append(s1);
            cout << s << "\n";
        }else if(option == 2){
            cin >> a >> b;
            s1 = s;
            s = "";
            for(int i = a ;i < a+b ;i++){
                s+=s1[i];
            }
            cout << s << "\n";
        }else if(option == 3){
            cin >> a >> s1;
            string s2 = "";
            for(int i = a; i < s.length() ;i++){
                s2 += s[i];
            }
            //cout << s << endl;
            for(int i = a, j =0 ; i< a+s1.length();i++,j++){
                s[i] = s1[j];
                if(i>=s.length()) s += s1[j];
            }
            if(a+s1.length() < s.length()){
                for(int i = a+s1.length(),j=0 ;i < a+s1.length()+s2.length();i++,j++){
                    s[i] =s2[j];
                    if(i > s.length()) s+=s2[j];
                }
            }
            else{
                s.append(s2);
            }
            cout << s<<"\n";
        }else if(option == 4){
            cin >> s1;
            bool falg = false;
            cout << findSubstring(s ,s1)<<"\n";
        }

    }
    return 0;
}

样例三我也下载下来了

in:
4
@@@111aaabbbccc
1 ~~~
4 @1
3 0 23333
2 4 5
out:
@@@111aaabbbccc~~~
2
23333@@@111aaabbbccc~~~
3@@@1

还是WA

2023/2/12 18:03
加载中...