GPLT L1-110 这不是字符串题

题目编号

L1-110(这不是字符串题)


原题链接

题目内容

小特需要对一个正整数序列进行 M 次操作,操作类型包括:

  1. 查找替换:查找连续子序列并替换为指定序列(仅替换第一个匹配项)。
  2. 插入平均数:在相邻和为偶数的数字间插入平均数。
  3. 区间翻转:翻转指定区间内的子序列。

最终输出操作后的序列。


输入格式

  1. 第一行输入两个正整数 N, M(1 ≤ N, M ≤ 10³),表示初始序列长度和操作次数。
  2. 第二行输入 N 个正整数 A_i(1 ≤ A_i ≤ 26),表示初始序列。
  3. 后续 M 部分为操作描述:
  • 操作1
    - 第二行输入 L1L1 个正整数,表示需查找的序列。
    - 第三行输入 L2L2 个正整数,表示替换后的序列。
  • 操作2:无额外输入。
  • 操作3:第二行输入两个正整数 l, r(1 ≤ l ≤ r ≤ 当前序列长度),表示需翻转的区间。

输出格式

输出最终序列,数字间用空格分隔,末尾无多余空格。


输入样例

39 5
14 9 2 21 8 21 9 10 21 5 4 5 26 8 5 26 8 5 14 4 5 2 21 19 8 9 26 9 6 21 3 8 21 1 14 20 9 2 1
1
3 26 8 5
2 14 1
3
37 38
1
11 26 9 6 21 3 8 21 1 14 20 9
14 1 2 3 4 5 6 7 8 9 10 11 12 13 14
2
3
2 40


输出样例

14 9 8 7 6 5 4 3 2 1 5 9 8 19 20 21 2 5 4 9 14 5 8 17 26 1 14 5 4 5 13 21 10 9 15 21 8 21 2 9 10 11 12 13 14 1 2


样例解释

操作步骤中间结果(详见题目描述)。


代码限制

  • Java:时间限制 1100 ms,内存限制 512 MB。
  • 其他语言:时间限制 400 ms,内存限制 64 MB,栈限制 8192 KB。
  • 代码长度:≤ 16 KB。

来源

杭州百腾教育科技有限公司 · 作者:DAI, Longao


注:题目保证操作过程中序列长度不超过 100N

AC code

#include<bits/stdc++.h>
using namespace std;
#define endl '\n'
int find(const vector<int>&a,const vector<int>&b){
    vector<int>st;
    if(b.empty()) return -1;
    for(int i=1;i<a.size();i++){
        if(a[i]==b[1]) st.push_back(i);
    }
    for(int i=0;i<st.size();i++){
        int s=st[i];
        bool f(0);
        for(int j=s;j<s+b.size()-1;j++){
            if(a[j]!=b[j-s+1]) f=1;
        }
        if(!f) return s;
    }
    return -1;
}
int main(){
    cin.tie(0)->ios::sync_with_stdio(false);
    int n,m;cin>>n>>m;
    vector<int>a(n+1);
    for(int i=1;i<=n;i++) cin>>a[i];
    for(int i=1,op;i<=m;i++){
        cin>>op;
        if(op==1){
            int n1,n2;
            cin>>n1;
            vector<int>a1(n1+1);
            for(int i=1;i<=n1;i++) cin>>a1[i];
            cin>>n2;
            vector<int>a2(n2+1);
            for(int i=1;i<=n2;i++) cin>>a2[i];
            int pos=find(a,a1);
            if(pos==-1) continue;
            vector<int>pre,suf;
            vector<int>resa;
            for(int i=1;i<pos;i++) pre.push_back(a[i]);
            for(int i=pos+a1.size()-1;i<a.size();i++) suf.push_back(a[i]);
            for(int i=0;i<pre.size();i++) resa.push_back(pre[i]);
            for(int i=1;i<=n2;i++) resa.push_back(a2[i]); 
            for(int i=0;i<suf.size();i++) resa.push_back(suf[i]);
            n=resa.size();
            resa.insert(resa.begin(),0);
            a=resa;
        }
        else if(op==2){
            for(int i=1;i<=n-1;i++){
                if((a[i]+a[i+1])%2==0){
                    int num=(a[i]+a[i+1])/2;
                    a.insert(a.begin()+i+1,num);
                    i++;
                    n++;
                }
            }
        }
        else if(op==3){
            int l,r;cin>>l>>r;
            if(l^r) reverse(a.begin()+l,a.begin()+r+1);
        }
    }
    for(int i=1;i<=n;i++) cout<<a[i]<<" \n"[i==n];
    return 0;
}
/*
赛时为此浪费一小时debug QWQ
*/
    
posted @ 2025-04-20 23:52  usedchang  阅读(196)  评论(0)    收藏  举报