比赛 |
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;
}