列表

详情


NC20809. 灰魔法师

描述

“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 <= 105)
第二行 n 个整数 ai (1 <= ai <= 105)

输出描述

输出一个整数,表示满足上述条件的数对个数。

示例1

输入:

3
1 3 6

输出:

2

说明:

满足条件的有 (1, 2), (2, 3) 两对。

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C(clang 3.9) 解法, 执行用时: 100ms, 内存消耗: 1372K, 提交时间: 2018-11-26 11:27:11

#include<stdio.h>
#define N 100005
int a[2*N];
int main()
{
	int n,num,j;
	long long int ans=0;
	scanf("%d",&n);
	while(n--)
	{
		scanf("%d",&num);
		for(j=1;j*j<=2*N;j++)
			if(j*j>num)
				ans+=a[j*j-num];
		a[num]++;
	}
	printf("%lld",ans);
}

C++14(g++5.4) 解法, 执行用时: 124ms, 内存消耗: 1764K, 提交时间: 2020-05-09 22:07:49

#include<iostream>
long long ans,cnt[200005],n,i,x,j;
int main(){
  std::cin>>n;
  for(i=1;i<=n;++i) {
    std::cin>>x;
    for(j=1;j*j<=2e5;++j)if(j*j>x)ans+=cnt[j*j-x];++cnt[x];
  }
  std::cout<<ans;
}

上一题