TZOJ:玛祖游戏

时间:2021-01-12 14:41:32

描述

玛祖是一款非常经典的游戏,游戏的角色是一只青蛙,青蛙每次可以吐出一颗珠子,如果将珠子吐到场景中相同颜色的珠子旁边(称为击中),当三个或者三个以上的同颜色珠子在一起的时候便可以消掉,如果消掉后还有相同颜色的珠子,则可以继续消除(我们称为连击)。

YuYu也很喜欢这个游戏,而且希望连击次数越多越好,因此每次当她发现击中某种颜色的珠子能达到最大连击次数时,她总是等待该颜色出现!

现在给定已经出现在游戏场景中的珠子队列,问瑜瑜可能达到的最大连击次数是多少?

为了简化问题,我们的游戏规则是只要有两个颜色相同的珠子连在一起都可以消掉。

TZOJ:玛祖游戏

输入

输入数据有多组,每组占一行,每行一个由小写字母组成的字符串,长度不超过100000,表示游戏场景中的珠子队列,每个字母代表一种颜色。

输出

每组输出一个数字,表示最大的连击次数,该结果不会超过10000。

样例输入

b
aaabaaaa
ccccccccaaaaaaabbbdddddddeeeeeeeddddddbbbaaaaaaccccc

样例输出

1
2
5

题目来源

台州学院“达内杯”第十届大学生程序设计竞赛

菜鸡的成长史 ^-^

 #include <bits/stdc++.h>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
list<char> lis;
string s;char b[];
while(cin>>s)
{
int len=s.size();
for(int i=;i<len;i++)
{
lis.push_back(s[i]);
}
lis.unique();
list<char>::iterator it;int jishu=;
for(it=lis.begin();it!=lis.end();it++)
{
b[++jishu]=*it;
}
lis.clear();
if(jishu==)
{cout << << endl;continue;} //特判
int maxx=;
for(int i=;i<=jishu;i++)
{
int sum=;
int j=i-;
int k=i+;
while(b[j]==b[k]&&j>=&&k<=jishu)
{
sum++;j--;k++;
}
maxx=max(sum,maxx); //更新最大值
}
cout << maxx << endl;
}
return ;
}