链接:
来源:牛客网
时间限制: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("%lldn", sum);return 0;
}
本文发布于:2024-01-29 17:16:41,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170651980316974.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |