hdoj5328【尺取】

现在在队内赛(灰常艾斯比的队内赛),还是来写篇题解开心一下,23333.
题意:
就是问你找出一个最长的等比数列或者等差数列
思路:
一个等差的尺取,一个等比的尺取。2333,就这么过了,具体自己写吧。还是很容易实现的,注意数组要开1e6…还有long long….后面要做乘法。

#include <iostream>
#include <cstdio>
#include <string.h>
#include <algorithm>
using namespace std;
typedef __int64 LL;

const int N=1e6+10;

LL a[N];
int n;

int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
            scanf("%d",&a[i]);

        if(n==1)
        {
            puts("1");
            continue;
        }

        int sum1;
        int sum2,temp;
        int s,t;
        LL x1,x2;

        temp=1;
        sum1=1;
        t=2;
        for(s=1;s<n;s++)
        {
            x1=a[t]-a[s];
            while(x1==(a[t+1]-a[t])&&t+1<=n)
            {
                temp=t-s+2;
                t++;
            }
            s=t-1;
            t=t+1;
            sum1=max(sum1,temp);
        }

        temp=sum2=2;
        t=2;
        for(s=1;s<n;s++)
        {
            while((a[t+1]*a[t-1])==(a[t]*a[t])&&t+1<=n)
            {
                temp=t-s+2;
                t++;
            }
            s=t-1;
            t=t+1;
            sum2=max(sum2,temp);
        }
        printf("%d\n",max(sum1,sum2));
    }
}
/*
10
1 2 3 4 6 8 10 12 14 16
13
1 2 3 4 6 1 3 1 8 10 12 14 16
*/
posted @ 2016-08-10 13:33  see_you_later  阅读(103)  评论(0编辑  收藏  举报