HDU 3833 - YY's new problem (等差数列)

题意

判断1~N中有没有一个等差数列。

枚举公差,直接用数组判断。学过高等数学的我们知道这样的复杂度是$O(nlogn)$

代码

int arr[MAXN], n;
 
bool Solve()
{
    for (int i = 1; i <= n; i++)
        for (int j = 1; j <= n; j++)
        {
            if (i+(j<<1) > n) break;
            if (arr[i] < arr[i+j] && arr[i+j] < arr[i+j*2]) return true;
            if (arr[i] > arr[i+j] && arr[i+j] > arr[i+j*2]) return true;
        }
    return false;
}
int main()
{
    //ROP;
    int T;
    scanf("%d", &T);
    while (T--)
    {
        scanf("%d", &n);
        for (int i = 0; i < n; i++)
        {
            int tmp;
            scanf("%d", &tmp);
            arr[tmp] = i;
        }
        printf("%s\n", Solve() ? "Y" : "N");
    }
    return 0;
}

Powered by Jekyll and Theme by solid