求助:神秘RE
  • 板块学术版
  • 楼主66xyyd
  • 当前回复8
  • 已保存回复8
  • 发布时间2023/8/3 09:16
  • 上次更新2023/11/3 06:13:55
查看原帖
求助:神秘RE
946515
66xyyd楼主2023/8/3 09:16

题目:

小明非常喜欢数列,于是他提出了一个关于数列的问题。他拿到一个长度为 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,同时机房网络不太好,访问不了云剪切板)

2023/8/3 09:16
加载中...