标签:
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;
}
URAL 1654. Cipher Message (STL stack)
标签:
原文地址:http://blog.csdn.net/u013446688/article/details/46273931