链接: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;
}