首先,用一个桶保存每个数的位置
因为等差数列只需三个便可成立,所以我们可以直接暴力枚举前两个数,然后直接用桶判断第三个数是否在前两个数后面就可以了,直接输出‘Y’
#include<bits/stdc++.h>
using namespace std;
int b[100100];
int a[100100];
int main() {
int i,j,x,y,n,k,m,o;
cin>>n;
for (k=1; k<=n; k++) {
cin>>x;
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
o=0;
for (i=1; i<=x; i++) {
cin>>a[i];
b[a[i]]=i;//做一个桶
}
for (i=1; i<=x; i++) {
for (j=i+1; j<=x; j++) {
if (b[a[j]-a[i]+a[j]]>j) {
o=1;
cout<<'Y'<<endl;
break;//暴力枚举,然后看第三个数是否在前两个数之前
}
}
if (o==1)break;
}
if (o==0)cout<<'N'<<endl;
}
return 0;
}
结束!