比赛 20120419x 评测结果 AWWWAWWWWW
题目名称 最长数列 最终得分 20
用户昵称 201101 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2012-04-19 17:08:10
显示代码纯文本
/*
UID:cheepok
PID:series
*/

#include<stdio.h>
#include<stdlib.h>
#include<queue>
#include<set>

using namespace std;

typedef long long Int;

multiset <Int> s;

multiset <Int> :: iterator it;

queue <Int> q;

Int Q,n,ans,Max,a[101];

Int max(Int a,Int b)
{
	return a>b?a:b;
}

int main()
{
	freopen("series.in","r",stdin);
	freopen("series.out","w",stdout);
	Int i,j,k,l,x,y,z;
	const Int MAXN=~0U;
	scanf("%I64d",&Q);
	while(Q--)
	{
		s.clear();ans=0;
		scanf("%I64d",&n);
		for(i=1;i<=n;i++)
		{
			scanf("%I64d",&a[i]);
			s.insert(a[i]);
		}
		for(i=1;i<=n;i++)
		{
			for(j=1;j<=n;j++)
			{
				/**********CASE1**********/
				x=a[j]-a[i];y=a[i];
				for(k=1;;k++)
				{
					if(s.find(y)==s.end())
					{
						ans=max(ans,k-1);
						break;
					}
					it=s.find(y);
					s.erase(it);
					q.push(y);
					y+=x;
				}
				while(!q.empty())
				{
					s.insert(q.front());
					q.pop();
				}
				/**********CASE2**********/
				if(a[i])if(a[j]%a[i]==0)
				{
					x=a[j]/a[i];y=a[i];
					for(k=1;;k++)
					{
						if(s.find(y)==s.end())
						{
							ans=max(ans,k-1);
							break;
						}
						it=s.find(y);
						s.erase(it);
						q.push(y);
						y*=x;
					}
					while(!q.empty())
					{
						s.insert(q.front());
						q.pop();
					}
				}
				/**********CASE3**********/
				if(a[i]&&a[i]!=1&&a[i]!=-1)if(a[j]%a[i]==0)
				{
					x=a[i];z=a[i];
					for(y=1;;y++)
					{
						if(x==a[j])
						{
							break;
						}
						if(a[j]<=0&&x<a[j])
						{
							goto l1;
						}
						if(a[j]>=0&&x>a[j])
						{
							goto l1;
						}
						x*=a[i];
					}
					x=a[i];
					for(k=1;;k++)
					{
						if(s.find(z)==s.end())
						{
							ans=max(ans,k-1);
							break;
						}
						it=s.find(z);
						s.erase(it);
						q.push(z);
						for(l=1;l<y;l++)
						{
							z*=x;
						}
						x=z;
					}
					while(!q.empty())
					{
						s.insert(q.front());
						q.pop();
					}
				}
				l1:continue;
			}
		}
		printf("%I64d\n",ans);
	}
	return 0;
}