题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=5328
题意:
给你一串数字,找出里面最长的连续等差数列或则等比数列
题解:
尺取
代码:
#include <cstdio>
#include <cmath>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
#define met(a,b) memset(a,b,sizeof(a))
#define inf 0x3f3f3f3f
typedef long long ll;
const ll maxn = 1e6+10;
//const double eps = 1e-1;
ll num[maxn];
ll n;
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
ll n;
// met(num,0);
// for(int i=0;i<=n;i++)
// num[i]=0;
scanf("%lld",&n);
for(ll i=1;i<=n;i++)
scanf("%lld",&num[i]);
ll len,len1,len2;
len=len1=len2=2;
ll x1=num[2]-num[1];
double x2=num[2]*1.0/num[1];
for(ll i=3;i<=n;i++)
{
if(num[i]-num[i-1]==x1)
{
len1++;
len=max(len,len1);
}
else
{
x1=num[i]-num[i-1];
len1=2;
}
if(num[i]*1.0/num[i-1]==x2)
{
len2++;
len=max(len,len2);
}
else
{
x2=num[i]*1.0/num[i-1];
len2=2;
}
}
if(n==1)
len=1;
printf("%lld\n",len);
}
}