记录编号 38475 评测结果 AEWEEEEEEE
题目名称 最长数列 最终得分 10
用户昵称 Gravatar王者自由 是否通过 未通过
代码语言 C++ 运行时间 0.556 s
提交时间 2012-04-19 18:32:48 内存使用 0.31 MiB
显示代码纯文本
#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;
}