srupのメモ帳

競プロで解いた問題や勉強したことを記録していくメモ帳

ABC 043 B - バイナリハックイージー / Unhappy Hacking (ABC Edit)

問題

問題概要

省略

解法

条件通りにの文字列を作る。 0の時は、文字列の末尾に0を付け加え、1の時は文字列の末尾に1を付け加え、Bの時は、文字列の末尾を取ればよい。

ミス

ClangだとACだけど、GCCだとREでよく分からない。

[追記]

空の時にpop_backするのはまずいみたいです。

コード

#include <iostream>
#include <string>
using namespace std;
#define rep(i,n) for(int i=0;i<(n);i++)

int main(void){
    string s; cin >> s;
    string ans;
    rep(i, s.size()){
        if(s[i] == '0') ans += '0';
        else if(s[i] == '1') ans += '1';
        else{
            ans.pop_back();
        }
    }
    cout << ans << endl;
    return 0;
}

上記修正コード(空の時にpop_backしないように)

#include <iostream>
#include <string>
using namespace std;
#define rep(i,n) for(int i=0;i<(n);i++)

int main(void){
    string s; cin >> s;
    string ans;
    rep(i, s.size()){
        if(s[i] == '0') ans += '0';
        else if(s[i] == '1') ans += '1';
        else{
            if(!ans.empty()) ans.pop_back();//空文字でなければ
        }
    }
    cout << ans << endl;
    return 0;
}