小明非常喜欢数列,于是他提出了一个关于数列的问题。他拿到一个长度为n的数列,之后对这个数列进行了两种操作:
第一种:D x
表示删除数列第x位置的一个数字,后面的数字向前移动(若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个数,表示当前的数组。
输入样例
4 3
4 5 2 1
Z 3 3
Z 0 1
D 2
输出样例
5
1 4 2 3 1
数据范围
对于10%的数据,1 <= n <= 4; 对于50%的数据,1 <= n <= 1024; 对于100%的数据,1 <= k<= n <=5000,且ai,x,y是int范围内的整数。
样例解释
初始数组为(4 5 2 1)
执行完Z 3 3得到(4 5 2 3 1)
执行完Z 0 1得到(1 4 5 2 3 1)
执行完D 2得到(1 4 2 3 1)
#include <bits/stdc++.h>//版权归熬夜的Alan Walker所以,侵权必究 using namespace std;//使用命名空间 int x,y,m,numone,numtwo;//定义所需要的变量 char n;//定义所需要的字符 n int main() { vector<int> c;//定义vector数组 cin>>x>>y;//输入x,y。x为数组个数,y为插入或删除个数 for (int i = 0; i < x; i++) { cin>>m;//输入末尾的数 c.push_back(m);//添加 } for(int i=0; i<y; i++) {//不可使用Switch,否则判断不了 cin>>n;//输入字符 if(n=='D') { cin>>numone;//删除的数 if(numone<c.size())//可以判断是否大于数组,如果不是就执行,否则就不执行 c.erase(c.begin() + numone);// } if(n=='Z') { cin>>numone>>numtwo; if(numone>c.size())//判断是否大于数组,是就加入到后面 c.push_back(numtwo); else c.insert(c.begin()+numone, numtwo);//不是就直接插入 } } cout<<c.size()<<endl;//输出个数 for (int i = 0; i < c.size(); i++) cout << c[i] << " ";//输出数组 return 0;//退出 }
调用 vectorvector 提供的标准函数操作数据即可