列表

详情


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;}

上一题