NC20809. 灰魔法师
描述
输入描述
第一行一个整数 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; }