南邮NOJ2029节奏大师
这几天一直刷题,感觉没什么效率,找了几篇关于ACM学习的文章看了看,说这个记录练习的心得很重要,巴拉巴拉一堆建议,因为这些日子一直做题却没写,说得当时我就心里颤了颤,刚刚写完一题,提交过了,在此写一写关于这一题的一些事情。
题目描述
自从某信推出了《节奏大师》这款手游之后,贲神就疯狂的迷上这种papapa的节奏,并且依靠优秀的操作打出了很高的分数,摇到了不少妹子。在游戏中,玩家需要根据歌曲的节奏进行点击。我们简化一下计分规则,如果准确的击中了音符,则这个音符标记为get(g),否则标记为lose(l),玩家的最后得分等于他的最大连击次数(最长的连续的g的长度)。现在给出玩家的完成情况,请计算出他的最终得分。
输入
第一行为一个正整数T,表示一共有T组数据
每组数据占一行,是仅由小写g和l组成的字符串,字符串长度<=100
输出
一个整数n,表示玩家的得分
样例输入
2
gggllgg
llllllll
样例输出
3
0
我刚开始看的时候也觉得不难,写的时间也不长,确实不难(其实自己写出来还是挺费劲的),主要是求连续相同字符的最大长度。
我定义了好多变量,到后来自己都有点晕了,起初这段代码我没加if判断,后来在运行时出现运行时错误,估计是没好好考虑字符数组没有g的情况,此时q=0,当然无法排序了。后来改了过来就好了。
还有一个错误,就是我输出的数据始终比理论上的数据多1,后来发现是下面的p值多了一个1,于是最后变成了p-1。两处错误全部改正后就好了。
#include <iostream> #include<string.h> #include<stdlib.h> using namespace std; int comp(const void*a,const void*b) { return *(int*)b-*(int*)a; } int main() { int T,i,j,p,q; cin>>T; while(T--!=0) { int b[101]={0}; char a[101]; cin>>a; q=0; for(i=0;i<strlen(a);i++) { p=0; if(a[i]!='g') { continue; } else { j=i; do { ++p; }while(a[j++]=='g'); b[q++]=p-1; } } if(q>=1) { qsort(b,q,sizeof(int),comp); } cout<<b[0]<<endl; } return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
posted on 2015-02-03 18:18 Tob__yuhong 阅读(179) 评论(0) 编辑 收藏 举报