励志用少的代码做高效表达


Problem describe

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.


题意分析

题意:给定一个1000*1000的棋盘,主教棋子的数量n。 规则是若某一主教与其他主教出现在同一条对角线上, 就会互相攻击。 问互相攻击的主教棋子的对数。

首先思考:
若同一主对角线上有n个元素,则在这条对角线上互相攻击棋子的对数为:n*(n-1)/2。(第一个棋子与其余n-1个互相攻击,第二个棋子与其余n-2个互相攻击…即:n-1+n-2+n-3+…+1最后使用等差数列求和公式

因此问题转化为求出棋盘中每条对角线上的棋子个数, 分别代入公式,将结果累加即可

很容易推导出规则:同一主对角线的数相减相等; 同一副对角线的数相加相等;

注意:第一次尝试时,我首先想到利用map容器的归纳性质做映射求解, 但其实直接用数组解即可(貌似大多数的map映射都可简化为数组)。


#include<bits/stdc++.h>
using namespace std;
int main() {ios::sync_with_stdio(false);int n, a[4010]; //采用同一数组的不同区间表达两组数cin>>n; memset(a,0,sizeof(a));for(int i=0;i<n;i++) {int x, y;cin>>x>>y;a[x+y]++;a[x-y+3000]++;} long long sum=0;for(int i = 0; i < 4000; i++) if(a[i]>1) sum+=(a[i]*(a[i]-1)/2);cout << sum << endl;
return 0; }

天空不会永远阴暗,当乌云退尽的时候,蓝天上灿烂的阳光就会照亮大地。青草照样会鲜绿无比,花朵仍然会蓬勃开放。                 ——《平凡的世界》

18行代码AC_Wet Shark and Bishops CodeForces - 621B(数学推导+映射)相关推荐

  1. 18行代码AC_排序 HDU - 1106(sstream简单解法)

    励志用少的代码做高效表达. Problem describe 输入一行数字,如果我们把这行数字中的'5'都看成空格,那么就得到一行用空格分割的若干非负整数(可能有些整数以'0'开头,这些头部的'0'应 ...

  2. Python爬虫利用18行代码爬取虎牙上百张小姐姐图片

    Python爬虫利用18行代码爬取虎牙上百张小姐姐图片 下面开始上代码 需要用到的库 import request #页面请求 import time #用于时间延迟 import re #正则表达式 ...

  3. 18行代码AC——PTA 二叉树的遍历 (10分)——解题报告

    励志用尽量少的代码做高效的表达. 根据输入构造二叉树,输出该二叉树的先序序列.二叉树共有N个节点,节点编号是1到N.约定1号节点是根节点. 输入格式: 第一行输入整数N. 接下来有N行,依次给出1到N ...

  4. L1-005 考试座位号 (15分) C语言实现(18行代码AC!)

    立志用更少的代码做更高效的表达 每个 PAT 考生在参加考试时都会被分配两个座位号,一个是试机座位,一个是考试座位.正常情况下,考生在入场时先得到试机座位号码,入座进入试机状态后,系统会显示该考生的考 ...

  5. 15行代码AC——Link/Cut Tree CodeForces - 614A(爆long long处理+快速幂讲解)

    励志用少的代码做高效表达 Problem describe Programmer Rostislav got seriously interested in the Link/Cut Tree dat ...

  6. 1040 有几个PAT (25分)——18行代码AC

    立志用更少的代码做更高效的表达 PAT乙级最优题解-->传送门 字符串 APPAPT 中包含了两个单词 PAT,其中第一个 PAT 是第 2 位§,第 4 位(A),第 6 位(T):第二个 P ...

  7. 18行代码解决:(C语言)L1-046 整除光棍 (20分)

    立志用更少的代码做更高效的表达 这里所谓的"光棍",并不是指单身汪啦~ 说的是全部由1组成的数字,比如1.11.111.1111等.传说任何一个光棍都能被一个不以5结尾的奇数整除. ...

  8. 蓝桥杯 试题 基础练习 龟龟龟龟龟兔赛跑预测——18行代码AC

    问题描述: 话说这个世界上有各种各样的兔子和乌龟,但是研究发现,所有的兔子和乌龟都有一个共同的特点--喜欢赛跑.于是世界上各个角落都不断在发生着乌龟和兔子的比赛,小华对此很感兴趣,于是决定研究不同兔子 ...

  9. opencv 人脸识别_python基于openCV人脸识别18行代码实现

    人脸识别 一.安装 1.打开命令行,输入pip install numpy,安装numpy. 2.安装opencv. pip install opencv-python 二.实现 (1)获取人脸识别训 ...

最新文章

  1. C++智能指针(设计和使用)
  2. 6大设计原则之依赖倒置原则
  3. composer 更新国内镜像地址
  4. Redis集群的重启
  5. 非常值得一看—九种滤波算法C语言实现
  6. 134. Gas Station加油站
  7. 售前工程师的成长---一个老员工的经验之谈(5)
  8. greenplum 查询出来的数字加减日期_常用SQL系列之(八):列值累计、占比、平均值以及日期运算等
  9. Apache OpenOffice 漏洞使数千万用户易受代码执行攻击
  10. iOS gmssl 编译
  11. java的inputbox,Excel|VBA的inputbox函数和inputbox方法
  12. 计算机网络(五) | 数据链路层:MAC地址、以太网协议、MTU和ARP协议
  13. Github Page 个人主页——自定义域名
  14. 亚马逊网络关联是什么
  15. IE使用ntko插件,查看文件提示“文件存取错误”
  16. Windows10笔记本 闲置一段时间后黑屏无法唤醒,风扇全速运转的解决日志
  17. 蓝桥杯嵌入式设计与开发历届客观题答案
  18. Java创建泛型数组的一种方法
  19. 智慧的提问(不做慵懒的寄生虫)
  20. 蓝牙在汽车领域中的应用

热门文章

  1. 第33讲:可见即可爬,Appium 的使用
  2. 面试官:new一个对象的过程中发生了什么
  3. 青蛙跳台(含变种)及汉诺塔递归,母牛生小牛
  4. 实时远程医学影像服务质量保障与网络优化
  5. 王盛:QUIC让B站在20%丢包时实现零卡顿
  6. 王亚楠:基于强化学习的自动码率调节
  7. Nginx 架构浅析
  8. 腾讯与中国人民大学开源最新研究成果:3TS腾讯事务处理技术验证系统
  9. 数平精准推荐 | OCR技术之系统篇
  10. 面试官:看你简历写了熟悉Kafka,它为什么速度会这么快?