1. 程式人生 > >Wannafly挑戰賽27 - A 灰魔法師

Wannafly挑戰賽27 - A 灰魔法師

連結:https://www.nowcoder.com/acm/contest/215/A
來源:牛客網

時間限制:C/C++ 1秒,其他語言2秒
空間限制:C/C++ 262144K,其他語言524288K
64bit IO Format: %lld

題目描述

“White shores, and beyond. A far green country under a swift sunrise.”--灰魔法師

給出長度為n的序列a, 求有多少對數對 (i, j) (1 <= i < j <= n) 滿足 ai + aj 為完全平方數。

輸入描述

第一行一個整數 n (1 <= n <= 10^5)
第二行 n 個整數 ai (1 <= ai <= 10^5)

輸出描述

輸出一個整數,表示滿足上述條件的數對個數。

輸入

3
1 3 6

輸出

2

說明

滿足條件的有 (1, 2), (2, 3) 兩對。

解題思路

直接暴力就可以了。

#include <stdio.h>
#define N 250050
int a[N];
int main()
{
    int m, n;
    long long sum = 0;
    scanf("%d", &n);
    for (int i = 0; i < n; i++)
    {
        scanf("%d", &m);
        for (int j = 1; j < 500; j++)//遍歷1~250000之間的完全平方數
            if (j * j >= m)
                sum += a[j * j - m];//首先滿足j * j - m >= 0,然後用j * j - m與前面的m配對
        a[m]++;//m的個數加1,放在後面就是保證j * j - m與前面的m配對,不包括它本身
    }
    printf("%lld\n", sum);
    return 0;
}