题目
一个由0~n-1构成的序列,问其中是否存在3个元素的等差子序列。
分析
枚举。打表记录每个元素的位置,枚举前两个元素,判断第三个元素的位置。
说明
感觉O(n2)O(n^2)O(n2)还是有点勉强,还没想到别的方法,枚举观察找性质?
#include <stdio.h>
#include <stdlib.h>
int data[10001];
int index[10001];
int find(int n)
{
int flag = 0, value = 0;
for (int i = 0; i < n; ++ i) {
for (int j = i+1; j < n; ++ j) {
value = 2*data[j] - data[i];
if (value >= 0 && value < n && index[2*data[j] - data[i]] > j) {
return 0;
}
}
}
return 1;
}
int main()
{
int n;
while (~scanf("%d", &n) && n) {
getchar();
for (int i = 0; i < n; ++ i) {
scanf("%d", &data[i]);
}
for (int i = 0; i < n; ++ i) {
index[data[i]] = i;
}
if (find(n)) {
puts("yes");
} else {
puts("no");
}
}
return 0;
}