B. Wet Shark and Bishops
time limit per test:

2 seconds

memory limit per test:

256 megabytes

input:

standard input

output:

standard output

Today, Wet Shark is given n bishops on a 1000 by 1000 grid. Both rows and columns of the grid are numbered from 1 to 1000. Rows are numbered from top to bottom, while columns are numbered from left to right.

Wet Shark thinks that two bishops attack each other if they share the same diagonal. Note, that this is the only criteria, so two bishops may attack each other (according to Wet Shark) even if there is another bishop located between them. Now Wet Shark wants to count the number of pairs of bishops that attack each other.

Input

The first line of the input contains n (1 ≤ n ≤ 200 000) — the number of bishops.

Each of next n lines contains two space separated integers xi and yi (1 ≤ xi, yi ≤ 1000) — the number of row and the number of column where i-th bishop is positioned. It's guaranteed that no two bishops share the same position.

Output

Output one integer — the number of pairs of bishops which attack each other.

Sample test(s)
input
5
1 1
1 5
3 3
5 1
5 5
output
6
input
3
1 1
2 3
3 5
output
0
Note

In the first sample following pairs of bishops attack each other: (1, 3), (1, 5), (2, 3), (2, 4), (3, 4) and (3, 5). Pairs (1, 2), (1, 4), (2, 5)and (4, 5) do not attack each other because they do not share the same diagonal.

题意:在1000×1000的棋盘上面有n个棋子“象”。如果两个棋子处在同一条对角线上面,它们就会相互攻击,即使对角线之间有其他的棋子隔开。求有几对相互攻击的棋子。

思路:每个棋子都有相应的坐标,那么就把它们的坐标转换成为对角线的形式。sign1数组记录为'\'形对角线上的棋子个数,s2数组记录'/'形对角线上的棋子个数,棋子(i,j)对应siang1[1000-(i,j)]和sign2[i+j-1];

#include<bits/stdc++.h>
using namespace std;
int sign1[3000],sign2[3000];
int main()
{
int i,n,x,y,d1,d2;
scanf("%d",&n);
memset(sign1,0,sizeof(sign1));
memset(sign2,0,sizeof(sign2));
for(i=0; i<n; i++)
{
scanf("%d%d",&x,&y);
d1=x-y;
sign1[1000-d1]++;
d2=x+y;
sign2[d2-1]++;
}
__int64 ans=0;
for(i=0; i<3000;i++)
{
ans+=sign1[i]*(sign1[i]-1)/2;
ans+=sign2[i]*(sign2[i]-1)/2;
}
cout<<ans<<endl;
return 0;
}

  

Codeforces 612B. Wet Shark and Bishops 模拟的更多相关文章

  1. CodeForces 621B Wet Shark and Bishops

    记录一下每个对角线上有几个,然后就可以算了 #include<cstdio> #include<cstring> #include<cmath> #include& ...

  2. B. Wet Shark and Bishops(思维)

    B. Wet Shark and Bishops time limit per test 2 seconds memory limit per test 256 megabytes input sta ...

  3. Wet Shark and Bishops(思维)

    Today, Wet Shark is given n bishops on a 1000 by 1000 grid. Both rows and columns of the grid are nu ...

  4. 【矩阵乘法优化dp】[Codeforces 621E] Wet Shark and Blocks

    http://codeforces.com/problemset/problem/621/E E. Wet Shark and Blocks time limit per test 2 seconds ...

  5. CODEFORCEs 621E. Wet Shark and Blocks

    E. Wet Shark and Blocks time limit per test 2 seconds memory limit per test 256 megabytes input stan ...

  6. Codeforces Round #341 Div.2 B. Wet Shark and Bishops

    题意:处在同一对角线上的主教(是这么翻译没错吧= =)会相互攻击 求互相攻击对数 由于有正负对角线 因此用两个数组分别保存每个主教写的 x-y 和 x+y 然后每个数组中扫描重复数字k ans加上kC ...

  7. 【CodeForces 621B】Wet Shark and Bishops

    题 题意 1000*1000的格子里,给你n≤200 000个点的坐标,求有多少对在一个对角线上. 分析 如果求每个点有几个共对角线的点,会超时. 考虑到对角线总共就主对角线1999条+副对角线199 ...

  8. codeforce 621B Wet Shark and Bishops

    对角线 x1+y1=x2+y2 或者x1-y1=x2-y2 #include<iostream> #include<string> #include<algorithm& ...

  9. Chocolate&&木块拼接&&Cards&& Wet Shark and Bishops

    B. Chocolate time limit per test 1 second memory limit per test 256 megabytes input standard input o ...

随机推荐

  1. linux操作系统3 vi编辑器

    知识内容: 1.Linux基础命令复习 2.vi模式和基本操作 3.vi常用快捷键 一.Linux基础命令复习 目录(文件夹)操作 cd 进入目录 (tab自动补全) pwd 查看当前目录 mkdir ...

  2. UVA196

    #include<stdio.h> #include<iostream> #include <strstream> using namespace std; #de ...

  3. 知识picture

  4. OpenACC 梯度下降法求解线性方程的优化

    ▶ 书上第二章,用一系列步骤优化梯度下降法解线性方程组.才发现 PGI community 编译器不支持 Windows 下的 C++ 编译(有 pgCC 命令但是不支持 .cpp 文件,要专业版才支 ...

  5. Delphi 变体数组 Dataset Locate 查找定位

    Format 函数 Delphi 支持“开参数”和动态数组,变体数组,使用时的语法类似 Delphi 中的集合:采用两个方括号把不同类型的变量括起来(这太方便了啊),也可以采用声明一个 TVarRec ...

  6. 怎样在Windows本地搭建redis服务器

    1.下载最新redis       https://github.com/MicrosoftArchive/redis/releases 2.解压如果是mis 版本直接下一步下一步即可 3.接下来我们 ...

  7. as2 fla 关于影片在时间轴的问题

    多帧上面放着没实例名而且里面内容一致的影片,主要一开始读取了,那么跳帧的时候.会自动获取当前帧上的相同内容的影片. 但如果内容不一致的影片,那么在跳帧后,不会获取当前的影片,旧的影片也无法获取.只在当 ...

  8. cv::circle《转》

    void circle(CV_IN_OUT Mat& img, Point center, int radius, const Scalar& color, int thickness ...

  9. C# 获取文件名、目录、后缀、无后缀文件名、扩展名、根目录等

    [csharp] view plain copy class Program { static void Main(string[] args) { //获取当前运行程序的目录 string file ...

  10. ArrayList 原理(2)

    1. 概述 关于Java集合的小抄中是这样描述的: 以数组实现.节约空间,但数组有容量限制.超出限制时会增加50%容量,用System.arraycopy()复制到新的数组,因此最好能给出数组大小的预 ...