TZOJ:玛祖游戏
描述
玛祖是一款非常经典的游戏,游戏的角色是一只青蛙,青蛙每次可以吐出一颗珠子,如果将珠子吐到场景中相同颜色的珠子旁边(称为击中),当三个或者三个以上的同颜色珠子在一起的时候便可以消掉,如果消掉后还有相同颜色的珠子,则可以继续消除(我们称为连击)。
YuYu也很喜欢这个游戏,而且希望连击次数越多越好,因此每次当她发现击中某种颜色的珠子能达到最大连击次数时,她总是等待该颜色出现!
现在给定已经出现在游戏场景中的珠子队列,问瑜瑜可能达到的最大连击次数是多少?
为了简化问题,我们的游戏规则是只要有两个颜色相同的珠子连在一起都可以消掉。
输入
输入数据有多组,每组占一行,每行一个由小写字母组成的字符串,长度不超过100000,表示游戏场景中的珠子队列,每个字母代表一种颜色。
输出
每组输出一个数字,表示最大的连击次数,该结果不会超过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 }