比赛 20120419x 评测结果 C
题目名称 最长数列 最终得分 0
用户昵称 临轩听雨ゐ 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2012-04-19 15:55:30
显示代码纯文本
#include <fstream>
#include <cstdio>
#include <cstdlib>
#include <queue>   
#include <cmath>
#include <vector>  
using namespace std;
long long N,n;
long long num[101]={0};
bool bo[100001]={true};
long long cmp(const void *a,const void *b)	{return *(long long *)a-*(long long *)b;}
inline int ap()
{
	long long i,j;
	long long tmp=0,temp=0;
	long long jl;
	for(i=1;i<n;i++)
	{	
		tmp=1;
		jl=num[i];
		long long d=num[i+1]-num[i];
		for(j=i+1;j<=n;j++)
		{
			if(jl+d==num[j])
			{
				tmp++;
				jl+=d;
			}
		}
		if(tmp>temp) temp=tmp;
	}
	return temp;
}

inline int gp()
{
	long long i,j;
	long long tmp=0,temp=0;
	long long jl;
	for(i=1;i<n;i++)
	{
		tmp=1;
		jl=num[i];
		long long d=num[i+1]/num[i];
		for(j=i+1;j<=n;j++)
		{
			if(jl*d==num[j])
			{
				tmp++;
				jl*=d;
			}
		}
		if(tmp>temp) temp=tmp;
	}
	return temp;
}


inline int mi()
{
	long long i,j;
	long long tmp=0,temp=0;
	long long jl;
	long long t=0;
	for(i=1;i<=n;i++)
		if(num[i]>0) t=1;
	if(t==0)
	{
		for(i=1;i<=n;i++)
			num[i]=(-1)*num[i];
		qsort(num+1,n,sizeof(num[0]),cmp);
	}
	for(i=1;i<n;i++)
	{
		tmp=1;
		jl=num[i];
		if(jl==1) 
			continue;
		long long d=0,p=2;
		while(d!=p)
		{
			if(pow(double(jl),double(p))==num[i+1])
			{
				d=p;
				break;
			}
			if(pow(double(jl),double(p))>num[n])
				break;
			if(pow(double(jl),double(p))<num[n])
				p++;
		}
		for(j=i+1;j<=n;j++)
		{
			if(pow(double(jl),double(d))==num[j])
			{
				tmp++;
				jl=pow(double(jl),double(d));
			}
		}
		if(tmp>temp) temp=tmp;
	}
	return temp;
}

int main() 
{
    ifstream in ("series.in");
    ofstream out ("series.out");
	in>>N;
	for(long long z=0;z<N;z++)
	{
		in>>n;
		memset(num+1,0,sizeof(long long));
		for(long long i=1;i<=n;i++)
			in>>num[i];
		qsort(num+1,n,sizeof(num[0]),cmp);
		long long a,b,c;
		a=ap();
		b=gp();
		c=mi();
		long long ans=0;
		ans=a;
		if(b>ans)
			ans=b;
		if(c>ans)
			ans=c;
		out<<ans<<endl;
	}
    return 0;
}