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