問題描述
有一天,盾神撿到了好多好多五顏六色的珠子!他心想這些珠子這麼漂亮,可以做成一條項鍊然後送給他心儀的女生~於是他用其中一些珠子做成了長度爲n的項鍊。當他準備把項鍊首尾相接的時候,土方進來了。
“哇這麼噁心的項鍊你也做得出來!!!”
盾神自知審美不是他的長項,於是他很謙虛地請教土方,怎麼才能把項鍊做得漂亮。
“這個嘛~首先你要在這裏加上一個這種顏色的珠子,然後在這裏去掉這個珠子,然後……,最後你看看是不是漂亮很多咧~”土方一下子說出了m個修改步驟。
盾神覺得這個用人工做太麻煩了,於是交給了你。
輸入格式
第一行兩個數,分別爲n,m。
第二行n個數,表示盾神一開始的項鍊。第i個數表示第i顆珠子的顏色。
接下來m行,爲以下形式之一:
ADD P Q:表示在顏色爲P的珠子前面加上一個顏色爲Q的珠子。
DEL P:表示把顏色爲P的珠子去掉,如果它不在端點處,則需要把它旁邊的兩顆珠子連起來。例如某時刻項鍊狀態爲1 4 5 8,則執行DEL 4會變成1 5 8,執行DEL 1會變成4 5 8。
輸入保證在每次操作之前,項鍊有顏色爲P的珠子,且任意時刻珠子顏色互不相同。
輸出格式
第一行爲一個數len,爲做完所有操作後,項鍊的長度。
第二行len個數,表示此時項鍊的狀態。第i個數表示第i顆珠子的顏色。
樣例輸入
10 5
1 2 3 4 5 6 7 8 9 10
DEL 5
ADD 7 5
DEL 10
ADD 4 20
ADD 20 12
樣例輸出
11
1 2 3 12 20 4 6 5 7 8 9
數據規模和約定
表示顏色的數字不超過10^5的正數,1<=n<=10^4,1<=m<=10^4。
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
int main() {
int n, m;
cin >> n >> m;
vector<int> v(n);
for (int i = 0; i < n; i++)
cin >> v[i];
for (int i = 0; i < m; i++) {
string s;
cin >> s;
if (s == "DEL") {
int temp;
cin >> temp;
for (vector<int>::iterator it = v.begin(); it != v.end(); it++) {
if (*it == temp) {
v.erase(it);
break;
}
}
}
else if (s == "ADD") {
int temp1, temp2;
cin >> temp1 >> temp2;
for (vector<int>::iterator it = v.begin(); it != v.end(); it++) {
if (*it == temp1) {
v.insert(it, temp2);
break;
}
}
}
}
cout << v.size() << endl;
for (int i = 0; i < v.size(); i++) {
cout << v[i];
if (i != v.size() - 1)
cout << " ";
}
cout << endl;
system("pause");
return 0;
}