[伯俊]5430交流


[伯俊]5430交流


質問リンク:https://www.acmicpc.net/problem/5430

問題とI/O



質問へのアクセス


dqで解けました.
入力を受信した部分を少し処理する必要があります]部分と部分が出るときはdqの仕事をします
コマンドにreverseが表示されている場合はflagを使用してreverseを行うことができ、flagがtrueである場合はdqの上部がフロントエンドであると考え、求めます.

コード実装(C++)

#include <iostream>
#include <deque>
#include <string>

using namespace std;

string cmd;
deque<int> dq;
int n;
bool isReverse;
bool doCmd(){
    for(int i = 0 ; i < cmd.length() ; i++){
        if(cmd[i] == 'R') isReverse = (isReverse) ? false : true;
        else{
           if(dq.empty()) return false; 
           if(isReverse){
               dq.pop_back();
           }
           else{
               dq.pop_front();
           }
        }
    }
    return true;
}
int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);
    int testcase;
    char temp;
    cin >> testcase;
    while(testcase--){
        isReverse = false;
        dq.clear();
        cin >> cmd;
        cin >> n;
        string num = "";
        while(1){
            cin >> temp;
            if(temp == ']') {
                if(num != ""){
                    dq.push_back(stoi(num));
                }
                break;
            }
            else if(temp == '[') continue;
            else if(temp == ','){
                dq.push_back(stoi(num));
                num = "";
            }
            else{
                num += temp;
            }
        }
        if(doCmd()){
            cout << "[";
            if(isReverse){
                for(int i = dq.size() - 1 ; i >= 0 ; i--){
                    cout << dq[i];
                    if(i != 0) cout << ",";
                }
            }
            else{
                for(int i = 0 ; i < dq.size() ; i++){
                    cout << dq[i];
                    if(i != dq.size()-1) cout << ",";
                }
            }
            cout << "]\n";
        }
        else{
            cout << "error\n";
        }
    }
}