TZOJ:玛祖游戏

描述

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

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

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

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

输入

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

扫描二维码关注公众号,回复: 5663943 查看本文章

输出

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

样例输入

样例输出

题目来源

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

菜鸡的成长史 ^-^

 

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 int main()
 4 {
 5     ios::sync_with_stdio(false);
 6     list<char> lis;
 7     string s;char b[100005];
 8     while(cin>>s)
 9     {
10         int len=s.size();
11         for(int i=0;i<len;i++)
12         {
13             lis.push_back(s[i]);
14         }
15         lis.unique();
16         list<char>::iterator it;int jishu=0;
17         for(it=lis.begin();it!=lis.end();it++)
18         {
19             b[++jishu]=*it;
20         }
21         lis.clear();
22         if(jishu==1)
23             {cout << 1 << endl;continue;}   //特判
24         int maxx=0;
25         for(int i=2;i<=jishu;i++)
26         {
27             int sum=1;
28             int j=i-1;
29             int k=i+1;
30             while(b[j]==b[k]&&j>=1&&k<=jishu)
31             {
32                 sum++;j--;k++;
33             }
34             maxx=max(sum,maxx);  //更新最大值
35         }
36         cout << maxx << endl;
37     }
38     return 0;
39 }
View Code

 

 

猜你喜欢

转载自www.cnblogs.com/qq-1585047819/p/10599216.html