码迷,mamicode.com
首页 > 其他好文 > 详细

hihoCoder1686

时间:2018-02-13 19:01:28      阅读:171      评论:0      收藏:0      [点我收藏+]

标签:答案   单点   body   sub   none   时间   映射   std   100%   

#1686 : 互补二元组

时间限制:10000ms
单点时限:1000ms
内存限制:256MB

描述

给定N个整数二元组(X1, Y1), (X2, Y2), ... (XN, YN)。  

请你计算其中有多少对二元组(Xi, Yi)和(Xj, Yj)满足Xi + Xj = Yi + Yj且i < j。

输入

第一行包含一个整数N。  

以下N行每行两个整数Xi和Yi。  

对于70%的数据,1 ≤ N ≤ 1000    

对于100%的数据,1 ≤ N ≤ 100000  -1000000 ≤ Xi, Yi ≤ 1000000

输出

一个整数表示答案。

样例输入
5  
9 10  
1 3  
5 5  
5 4    
8 6
样例输出
2

分析:Xi+Xj=Yi+Yj等价于(Xi-Yi)+(Xj-Yj)=0,即横坐标与纵坐标之差为相反数。
开数组统计即可。

技术分享图片
#include<cstdio>
long long a[20000010];
int main()
{
    int N,x,y;
    scanf("%d",&N);
    int T=10000000;//0映射为T 
    for(int i=0;i<N;i++)
    {
        scanf("%d%d",&x,&y);
        a[x-y+T]++;
    }
    long long ans=0;
    for(int i=1;i<10000000;i++)
        ans+=a[i+T]*a[T-i]; 
    if(a[T]>=1)//0的相反数为0
    {
        long long temp=a[T]*(a[T]-1)/2;
        ans+=temp;
    }
    printf("%lld\n",ans);
    return 0;
}
View Code

 










hihoCoder1686

标签:答案   单点   body   sub   none   时间   映射   std   100%   

原文地址:https://www.cnblogs.com/ACRykl/p/8447086.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!