【HDOJ 5328】 Problem Killer

【HDOJ 5328】 Problem Killer

开始理解错题目意思了 以为是许多段区间连起来组成等差/比数列 连续的一段的话就好办了 顺序遍历即可 最终得到的最大值即为最大值

代码如下:

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>

using namespace std;

int main()
{
    int t,n,gc,mm,mc,mb,cc,a,b;
    double bb,gb;
    while(~scanf("%d",&t))
    {
        while(t--)
        {
            scanf("%d",&n);
            if(n == 1)
            {
                scanf("%d",&a);
                printf("1\n");
                continue;
            }
            n -= 2;
            scanf("%d",&a);
            scanf("%d",&b);
            gc = b-a;
            gb = b*1.0/a;
            a = b;
            mm = mc = mb = 2;

            while(n--)
            {
                scanf("%d",&b);
                cc = b - a;
                bb = b*1.0/a;
                if(cc == gc) mc++;
                else
                {
                    mc = 2;
                    gc = cc;
                }
                if(bb == gb) mb++;
                else
                {
                    mb = 2;
                    gb = bb;
                }

                mm = max(mm,max(mb,mc));

                a = b;
            }
            printf("%d\n",mm);
        }
    }
    return 0;
}

你可能感兴趣的:(【HDOJ 5328】 Problem Killer)