NC15029. 吐泡泡
描述
小鱼儿吐泡泡,嘟嘟嘟冒出来。小鱼儿会吐出两种泡泡:大泡泡"O",小泡泡"o"。 两个相邻的小泡泡会融成一个大泡泡,两个相邻的大泡泡会爆掉。 (是的你没看错,小气泡和大气泡不会产生任何变化的,原因我也不知道。) 例如:ooOOoooO经过一段时间以后会变成oO。
输入描述
数据有多组,处理到文件结束。
每组输入包含一行仅有'O'与'o'组成的字符串。
输出描述
每组输出仅包含一行,输出一行字符串代表小鱼儿吐出的泡泡经过融合以后所剩余的泡泡。
示例1
输入:
ooOOoooO
输出:
oO
说明:
自左到右进行合并C++(g++ 7.5.0) 解法, 执行用时: 3ms, 内存消耗: 428K, 提交时间: 2022-09-16 17:24:34
#include<bits/stdc++.h> using namespace std; int main(){ string x; while(cin>>x){ for(int i=0;i<x.size();i++){ if('o'==x[i-1]&&x[i]=='o'){ x[i-1]='O'; x.erase(i,1); i=0; }else if(x[i-1]=='O'&&x[i]=='O'){ x.erase(i-1,2); i=0; } } cout<<x<<"\n"; } }
C++(clang++ 11.0.1) 解法, 执行用时: 2ms, 内存消耗: 424K, 提交时间: 2022-09-29 14:53:16
#include<cstring> #include<stdio.h> int l,j,k,i;char s[0]; int main(){for(;~scanf("%s",s);s[j]='\0',printf("%s\n",s))for(l=strlen(s),k=0,i=0,j=0;i<l;j&&s[i]<97&&s[j-1]<97?--j:s[j++]=s[i],++i)if(j&&s[i]>97&&s[j-1]>97)s[i]='O',--j;}