/*
从数列中O(n)找一个mid,枚举他前面的每个数,记录下差
再枚举mid后面的数,如果差记录过,则存在等差数列
*/
#include < iostream > #include < cstdio > #include < cstring > using namespace std;
const int maxn = 10010;
int T,
n,
a[maxn];
int vis[maxn << 4];
int main() {
scanf("%d", &T);
while (T--) {
scanf("%d", &n);
bool flag = 0;
memset(vis, 0, sizeof(vis));
for (int i = 1; i <= n; i++) scanf("%d", &a[i]);
for (int i = 2; i <= n; i++) {
for (int j = 1; j < i; j++) vis[a[i] - a[j] + 10010] = i;
for (int j = i + 1; j <= n; j++) {
if (vis[a[j] - a[i] + 10010] == i) flag = 1;
if (flag) break;
}
if (flag) break;
}
if (flag) printf("Y\n");
else printf("N\n");
}
}
来源: http://www.bubuko.com/infodetail-2251420.html