Description
An arithmetic series consists of a sequence of terms such that each term minus its immediate predecessor gives the same result. For example, the sequence 3, 7, 11, 15 is the terms of the arithmetic series 3+7+11+15; each term minus its predecessor equals 4. (Of course there is no requirement on the first term since it has no predecessor.)
Given a collection of integers, we want to find the longest arithmetic series that can be formed by choosing a sub-collection (possibly the entire collection).
Input
There are multiple cases, and each case contains 2 lines: the first line contains the count of integers (between 2 and 1000 inclusive), the following line contains all the integers (between -1,000,000,000 and 1,000,000,000 inclusive) separated by one or more spaces.
Output
Print a single number for each case in a single line.
Sample Input
7 3 8 4 5 6 2 2 4 -1 -5 1 3 4 -10 -20 -10 -10
Sample Output
5 3 3
勇敢的暴力吧~
CODE:
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <string>
#include <cstring>
#include <queue>
#include <stack>
#include <vector>
#include <set>
#include <map>
const int inf=0xfffffff;
typedef long long ll;
using namespace std;
ll num[1003];
int main()
{
//freopen("in.in","r",stdin);
int N;
while(~scanf("%d",&N)){
for(int i=0;i<N;i++){
scanf("%lld",&num[i]);
}
sort(num,num+N);
int maxn=-inf;
int ans;
int t;
for(int i=0;i<N;i++){
for(int j=i+1;j<N;j++){
ans=0;
t=num[j]-num[i];
ans+=2;
int fir=j,sec=j+1;
while(sec<N){
if(num[sec]-num[fir]==t){
ans++;
fir=sec;
sec++;
}
else sec++;
}
maxn=max(maxn,ans);
}
}
printf("%d\n",maxn);
}
return 0;
}