比赛 20120419x 评测结果 ATTETTTETT
题目名称 最长数列 最终得分 10
用户昵称 QhelDIV 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2012-04-19 15:48:12
显示代码纯文本
#include <fstream>
#include <algorithm>
#include <cstdlib>
#include <map>
using namespace std;
ifstream fin("series.in");
ofstream fout("series.out");
long long n,N,K,A[300],Max;
map <long long,int> Map;
bool Cmp(const long long a,const long long b)
{
	return abs(a)<abs(b);
}
void Solve()
{
long long i,ii,j,k,l,Ti,Tmp;
	fin>>N;
	for(i=1;i<=N;i++)
	{
		Map.clear();
		fin>>n;
		Max=-20000000;
		for(j=1;j<=n;j++)
		{
			fin>>A[j];
			Map[A[j]]++;
		}
		sort(A+1,A+n+1,Cmp);
		for(j=1;j<=n;j++)
			for(k=j+1;k<=n;k++)
			{
				l=2;K=A[k]-A[j];
				while(Map[A[k]+K])
					l++,K+=A[k]-A[j];
				Max=max(Max,l);
				
				if(A[k] % A[j]==0)
				{
					l=3;K=A[k]/A[j];
					while(Map[A[k]*K])
						l++,K*=K;
					Max=max(Max,l-1);
				}
				
				K=A[j];l=3;Ti=1;Tmp=K;
				if(abs(K)!=1)
					while(abs(K)<abs(A[k]))
						K*=Tmp,Ti++;
				if(K==A[k])
				{
					Tmp=K;
					for(ii=2;ii<=Ti;ii++)
						K*=Tmp;
					while(Map[K])
					{
						Tmp=K;
						for(ii=2;ii<=Ti;ii++)
							K*=Tmp;
						l++;
					}
					Max=max(Max,l-1);
				}
			}
		fout<<Max<<endl;
	}
}

int main()
{
	Solve();
	
	fin.close();
	fout.close();
	return 0;
}