比赛 |
20120419x |
评测结果 |
AEWEEEEEEE |
题目名称 |
最长数列 |
最终得分 |
10 |
用户昵称 |
王者自由 |
运行时间 |
0.000 s |
代码语言 |
C++ |
内存使用 |
0.00 MiB |
提交时间 |
2012-04-19 15:24:44 |
显示代码纯文本
#include <cstdio>
#include <cmath>
#include <vector>
#include <algorithm>
using namespace std;
const int N = 100 + 10;
int t, n, k, a[N], r;
vector<pair<int, int> > s[4];
void push(int j, int k) {
if(k == 0) return;
int l;
for(l=0; l<s[j].size(); l++)
if(s[j][l].first == k) {
s[j][l].second++;
break;
}
if(l == s[j].size())
s[j].push_back(make_pair(k, 1));
}
int count(int j) {
int r = 0;
for(int i=0; i<s[j].size(); i++)
r = max(r, s[j][i].second);
return r + 1;
}
int main() {
freopen("series.in", "r", stdin);
freopen("series.out", "w", stdout);
scanf("%d", &t);
while(t--) {
scanf("%d", &n);
for(int i=1; i<=n; i++)
scanf("%d", a+i);
s[1].clear(); s[2].clear(); s[3].clear();
for(int i=1; i<=n; i++)
for(int j=1; j<=n; j++) {
if(a[i] == a[j]) continue;
k = a[j] - a[i];
push(1, k);
k = a[j] / a[i];
if(a[i] * k == a[j]) push(2, k);
k = log(a[j]) / log(a[i]);
if(pow(a[i], k) == a[j]) push(3, k);
}
printf("%d\n", max(count(1), max(count(2), count(3))));
}
return 0;
}