题目:
小明非常喜欢数列,于是他提出了一个关于数列的问题。他拿到一个长度为 n 的数列,之后对这个数列进行了两种操作:
第一种:D x
表示删除数列第 xx 位置的一个数字,后面的数字向前移动(若 x> 此时数列长度则操作无效);
第二种:Z x y
表示在数列的第 x 位置插入一个数字 y,后面的数字向后移动(若x>此时数列长度则在数列末尾插入 y);
经过k次这两种操作以后,小明想要知道现在的数列是什么,聪明的你可以帮助小明解决这个问题吗?
输入格式
输入包括k+2行数据; 第一行包括两个数n,k,分别表示数列中数的个数以及操作的次数,其中1=<k<=n<5000;
第二行n个数表示该数列的n个数,以空格隔开,其中任意数ai为int范围内的整数;
第三行到第k+2行,每行一个操作,格式见题面描述。
输出格式
输出包括两行;
第一行一个数m,表示全部操作之后数组的长度;
第二行m个数,表示当前的数组。
我的代码:
#include<iostream>
#include<vector>
using namespace std;
vector<int> ans;
int main(){
int n,k;
cin >> n >> k;
for(int i=0,p;i<n;i++){
cin >> p;
ans.push_back(p);
}
while(k--){
char ch;
int p;
cin >> ch;
if(ch=='D'){
cin >> p;
if(ans.empty()) continue;
if(p==ans.size() && ans.size()){
ans.erase(ans.end());
} else if(p<ans.size() && ans.size() && p>=0){
ans.erase(ans.begin()+p);
}
} else{
int q;
cin >> p >> q;
if(p>=ans.size() || p<0){
ans.push_back(q);
} else{
ans.insert(ans.begin()+p,q);
}
}
}
cout << ans.size() << '\n';
for(int i=0,siz=ans.size();i<siz;i++){
cout << ans[i] << ' ';
}
return 0;
}
为什么会RE?可以构造出来一组让我程序RE的数据吗? (校内OJ,同时机房网络不太好,访问不了云剪切板)