1654. Cipher Message
Time limit: 1.0 second
Memory limit: 64 MB
Müller tried to catch Stierlitz red-handed many times, but alwaysfailed because Stierlitz could ever find some excuse. Once Stierlitz waslooking through his email messages. At that moment, Müller enteredsecretly and watched a
meaningless sequence of symbols appear on the screen.“A cipher message,” Müller thought.“UTF-8,” Stierlitz thought.
It is known that Stierlitz ciphers messages by the following method.
- He deletes all spaces and punctuation marks.
- He replaces all successive identical letters by one such letter.
- He inserts two identical letters at an arbitrary place many times.
Try to restore a message as it was after the second step. For that, remove fromthe message all pairs of identical letters inserted at the third step.
Input
The only input line contains a message ciphered by Stierlitz. The messageconsists of lowercase English letters and its length is at most 200000.
Output
Output the restored message.
Sample
input | output |
---|---|
wwstdaadierfflitzzz |
stierlitz |
Problem Author: Vladimir Yakovlev (idea by Alexander Klepinin)
Problem Source: NEERC 2008, Eastern subregion quarterfinals
解析:相邻两相同字母可消去,直接进栈一遍即可,相同则出栈,不同则进栈。
AC代码:
#include <bits/stdc++.h> using namespace std; stack<char> p; int main(){ #ifdef sxk freopen("in.txt", "r", stdin); // freopen("out.txt", "w", stdout); #endif // sxk string s; while(cin>>s){ int len = s.size(); for(int i=0; i<len; i++){ if(!p.empty() && p.top() == s[i]) p.pop(); else p.push(s[i]); } s = ""; while(!p.empty()){ s += p.top(); p.pop(); } reverse(s.begin(), s.end()); cout<<s<<endl; } return 0; }