zoukankan      html  css  js  c++  java
  • hihoCoder1686

    #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
    ",ans);
        return 0;
    }
    View Code
    
    
    
    







  • 相关阅读:
    HTTP权威指南笔记-1.概述
    C# 设计模式之工厂模式(一)
    C# 读取Excel内容
    C# 反射
    C# 分部类与分部方法
    图像处理
    mysql 使用问题?
    第一节mysql 安装
    软件包管理
    第四节基础篇
  • 原文地址:https://www.cnblogs.com/ACRykl/p/8447086.html
Copyright © 2011-2022 走看看