目錄
-
- 題目描述
- 輸入格式
- 輸出格式
- 樣例輸入
- 樣例輸出
題目描述
小明非常喜歡數列,于是他提出了一個關于數列的問題。他拿到一個長度為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
标簽:vector的insert()、erase()、push_back()、size()、疊代器
注意:
如果插入時或删除時沒有檢查v.size()會報運作錯誤
AC代碼:
#include<cstdio>
#include<iostream>
#include<vector>
using namespace std;
int main(){
char c;
int a,n,k;
int q,m;
vector<int> v;
cin>>n>>k;
for(int i=0;i<n;i++){
cin>>a;
v.push_back(a);
}
for(int i=0;i<k;i++){
cin>>c;
if(c=='Z'){
cin>>q>>m;
if(q>v.size()){
v.push_back(m);
continue;
}
v.insert(v.begin()+q,m);
}
else{
cin>>q;
if(q>=v.size())
continue;
v.erase(v.begin()+q);
}
}
cout<<v.size()<<endl;
for(vector<int>::iterator it=v.begin();it!=v.end();it++)
cout<<*it<<' ';
return 0;
}