藍橋杯 算法提高 盾神與條狀項鍊

問題描述
  有一天,盾神撿到了好多好多五顏六色的珠子!他心想這些珠子這麼漂亮,可以做成一條項鍊然後送給他心儀的女生~於是他用其中一些珠子做成了長度爲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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章