ABC 043 B - バイナリハックイージー / Unhappy Hacking (ABC Edit)
問題概要
省略
解法
条件通りにの文字列を作る。 0の時は、文字列の末尾に0を付け加え、1の時は文字列の末尾に1を付け加え、Bの時は、文字列の末尾を取ればよい。
ミス
ClangだとACだけど、GCCだとREでよく分からない。
[追記]
空の時にpop_backするのはまずいみたいです。@mmxsrup 空の文字列に対してpop_backを行うのは、動作が未定義らしいです(参考:https://t.co/SVXTy6NFzbhttps://t.co/xoTDxVfNmX
— satanic@C++ (@satanic0258) 2016年8月13日
コード
#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; }