南邮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编辑  收藏  举报

导航