时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld
题目描述
小鱼儿吐泡泡,嘟嘟嘟冒出来。小鱼儿会吐出两种泡泡:大泡泡"O
",小泡泡"o
"。
两个相邻的小泡泡会融成一个大泡泡,两个相邻的大泡泡会爆掉。
(是的你没看错,小气泡和大气泡不会产生任何变化的,原因我也不知道。)
例如:ooOOoooO
经过一段时间以后会变成oO
。
![tpp](https://i-blog.csdnimg.cn/blog_migrate/eb4738b9e585072193b12512e1c305a4.png)
输入描述:
数据有多组,处理到文件结束。
每组输入包含一行仅有'O'
与'o'
组成的字符串。
输出描述:
- 每组输出仅包含一行,输出一行字符串代表小鱼儿吐出的泡泡经过融合以后所剩余的泡泡。
示例1
- 输入
ooOOoooO
- 输出
oO
说明
- 自左到右进行合并
备注:
对于100%的数据,
字符串的长度不超过100。
WA:
#include <bits/stdc++.h>
using namespace std;
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
stack<char> st;
string s, str;
while(cin >> s)
{
st.push(s[0]);
for (int i = 1; i < s.size();i++)
{
if(st.empty() || st.top() != s[i])
{
st.push(s[i]);
continue;
}
if(!st.empty() && st.top() == s[i] && s[i] == 'o')
{
st.pop();
if(!st.empty() && st.top() == 'O')
{
st.pop();
}
else
{
st.push('O');
}
}
else if(!st.empty() && st.top() == s[i] && s[i] == 'O')
{
st.pop();
}
}
while(!st.empty())
{
str += st.top();
st.pop();
}
for (int i = str.size() - 1; i >= 0;i--)
{
cout << str[i];
}
cout << endl;
}
return 0;
}
AC:
#include <bits/stdc++.h>
using namespace std;
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
string s;
while(cin >> s)
{
string str;
stack<char> st;
st.push(s[0]);
for (int i = 1; i < s.size();i++)
{
if(st.empty() || st.top() != s[i])
{
st.push(s[i]);
continue;
}
if(!st.empty() && st.top() == s[i] && s[i] == 'o')
{
st.pop();
if(!st.empty() && st.top() == 'O')
{
st.pop();
}
else
{
st.push('O');
}
}
else if(!st.empty() && st.top() == s[i] && s[i] == 'O')
{
st.pop();
}
}
while(!st.empty())
{
str += st.top();
st.pop();
}
for (int i = str.size() - 1; i >= 0;i--)
{
cout << str[i];
}
cout << endl;
}
return 0;
}