ZeroJudge A870: List Maker

題目敘述

本題採EOF方式收資料,當資料的第一個字串為SHOW時,停止收資料並輸出陣列中的所有資料。字串會有三種指令:

1. ADD: 將字串放到陣列的最後面

2. INSERT: 將字串放到特定字串的前面

3. REMOVE: 將特定字串刪除


範例輸入 #1

ADD NEVER

ADD COLLAR

INSERT CAT COLLAR

ADD DOG

ADD SCARES

INSERT ANYTHING CAT

REMOVE CAT

INSERT THAT SCARES

REMOVE COLLAR

INSERT WEAR ANYTHING

REMOVE DOG

ADD CAT

INSERT YOUR CAT

SHOW

範例輸出 #1

NEVER WEAR ANYTHING THAT SCARES YOUR CAT


解題思路

可以利用Vector的Push_Back來處理ADD這個動作。INSERT可以開一個For迴圈,把原本陣列的東西放到一個新的陣列,並且判斷目前的資料是否為要插入的資料,如果是的話就將指定的資料先Push_Back再將原本這個位置的資料做Push_Back,REMOVE的道理也是和INSERT一樣。INSERT和REMOVE完之後可以使用Assign將新的陣列複製到舊的陣列上。

解題程式碼如下 (僅供參考):

#include <iostream>
#include <vector>
using namespace std;

int main() {
    string command;
    vector<string>v;
    while (cin >> command && command != "SHOW")
    {
        if (command == "ADD")
        {
            string str;
            cin >> str;
            v.push_back(str);
        }
        else if (command == "INSERT")
        {
            string X, N;
            cin >> X >> N;
            vector<string>tmp;
            for (int i = 0; i<v.size(); i++)
            {
                if (v[i] == N) tmp.push_back(X);
                tmp.push_back(v[i]);
            }
            v.clear();
            v.assign(tmp.begin(), tmp.end());
        }
        else
        {
            string str;
            cin >> str;
            vector<string>tmp;
            for(int i = 0; i<v.size(); i++)
            {
                if (v[i] != str) tmp.push_back(v[i]);
            }
            v.clear();
            v.assign(tmp.begin(), tmp.end());
        }
    }
    for (int i = 0; i<v.size(); i++)
    {
        cout << v[i] << " ";
    }
    cout << "\n";
}

留言

這個網誌中的熱門文章

ZeroJudge M933: 邏輯電路

ZeroJudge A148: You Cannot Pass?!

ZeroJudge A263: 日期差幾天