hihoCoder 第255周 hiho一下 Queen Attack

时间限制:10000ms

单点时限:1000ms

内存限制:256MB

描述

There are N queens in an infinite chessboard. We say two queens may attack each other if they are in the same vertical line, horizontal line or diagonal line even if there are other queens sitting between them.

Now given the positions of the queens, find out how many pairs may attack each other?

输入

The first line contains an integer N.

Then N lines follow. Each line contains 2 integers Ri and Ci indicating there is a queen in the Ri-th row and Ci-th column.

No two queens share the same position.

For 80% of the data, 1 <= N <= 1000

For 100% of the data, 1 <= N <= 100000, 0 <= Ri, Ci <= 1000000000

输出

One integer, the number of pairs may attack each other.

样例输入
5
1 1
2 2
3 3
1 3
3 1
样例输出
10

用 map 记录下每行每列每条斜线上有多少个 queen,最后统计一下即可。

 1 #include <cstdio>
 2 #include <iostream>
 3 #include <set>
 4 #include <vector>
 5 #include <map>
 6
 7 using namespace std;
 8
 9
10 int ccc(int t)
11 {
12     return t*(t-1)/2;
13 }
14
15 int main()
16 {
17     int N;
18     cin >> N;
19     int r, w;
20     map<int, int>s1, s2, s3, s4;
21     while (N--)
22     {
23         cin >> r >> w;
24         s1[r]++;
25         s2[w]++;
26         s3[r - w]++;
27         s4[r + w]++;
28     }
29     int ans = 0;
30     for (auto it : s1)
31     {
32         ans += ccc(it.second);
33     }
34     for (auto it : s2)
35     {
36         ans += ccc(it.second);
37     }
38     for (auto it : s3)
39     {
40         ans += ccc(it.second);
41     }
42     for (auto it : s4)
43     {
44         ans += ccc(it.second);
45     }
46     printf("%d", ans);
47     return 0;
48 }

原文地址:https://www.cnblogs.com/zhangchaosd/p/10888052.html

时间: 2024-10-08 18:59:10

hihoCoder 第255周 hiho一下 Queen Attack的相关文章

hihoCoder 第253周 hiho一下 矩形分割

时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi有一块由NxM个单位正方形组成的矩形.现在小Ho在某些单位正方形上画了一道分割线,这条分割线或者是单位正方形的主对角线(用'\'表示),或者是副对角线(用'/'表示). 现在小Hi想知道这些分割线把NxM的矩形分割成了多少块区域. 例如 /\/ 就把2x2的矩形分成了5个区域. /\/\ / \/ 把3x4的矩形分成了7个区域. 输入 第一包含两个整数N和M.(1 <= N, M <= 100) 以下N行每行包

hihoCoder 第254周 hiho一下 寻找最大值

时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 给定N个数A1, A2, A3, ... AN,小Ho想从中找到两个数Ai和Aj(i ≠ j)使得乘积Ai × Aj × (Ai AND Aj)最大.其中AND是按位与操作. 小Ho当然知道怎么做.现在他想把这个问题交给你. 输入 第一行一个数T,表示数据组数.(1 <= T <= 10) 对于每一组数据: 第一行一个整数N(1<=N<=100,000) 第二行N个整数A1, A2, A3, ... AN

hihocoder第七周 完全背包模板题

时间限制:20000ms 单点时限:1000ms 内存限制:256MB 描述 且说之前的故事里,小Hi和小Ho费劲心思终于拿到了茫茫多的奖券!而现在,终于到了小Ho领取奖励的时刻了! 等等,这段故事为何似曾相识?这就要从平行宇宙理论说起了………总而言之,在另一个宇宙中,小Ho面临的问题发生了细微的变化! 小Ho现在手上有M张奖券,而奖品区有N种奖品,分别标号为1到N,其中第i种奖品需要need(i)张奖券进行兑换,并且可以兑换无数次,为了使得辛苦得到的奖券不白白浪费,小Ho给每件奖品都评了分,其

hihocoder 1330 - 数组重排 - [hiho一下167周][最小公倍数]

题目链接:https://hihocoder.com/problemset/problem/1330 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi想知道,如果他每次都按照一种固定的顺序重排数组,那么最少经过几次重排之后数组会恢复初始的顺序? 具体来讲,给定一个1 - N 的排列 P,小Hi每次重排都是把第 i 个元素放到第 Pi个位置上.例如对于 P = (2, 3, 1),假设初始数组是(1, 2, 3),重排一次之后变为(3, 1, 2),重排两次之后

hihocoder 1331 - 扩展二进制数 - [hiho一下168周]

题目链接:http://hihocoder.com/problemset/problem/1331 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 我们都知道二进制数的每一位可以是0或1.有一天小Hi突发奇想:如果允许使用数字2会发生什么事情?小Hi称其为扩展二进制数,例如(21)ii = 2 * 21 + 1 = 5, (112)ii = 1 * 22 + 1 * 21 + 2 = 8. 很快小Hi意识到在扩展二进制中,每个数的表示方法不是唯一的.例如8还可以有(

hihocoder 1320 - 压缩字符串 - [hiho一下160周]

这道题目可以说是一道非常好非常一颗赛艇的DP题了. 需要注意的是,其中情形3),字符串必然能完全转化为 N(str)形式,如果有N(str1)M(str2)等等另外样式,应该首先使用拼接形式对其进行划分. 那么,我们首先考虑写一个用来压缩情形3)下的字符串的函数zip(): 1 char str[105]; 2 int bit(int n) 3 { 4 int cnt=0; 5 while(n>0) 6 { 7 n/=10; 8 cnt++; 9 } 10 return cnt; 11 } 12

hihocoder1497 Queen Attack

时间限制:10000ms单点时限:1000ms内存限制:256MB描述There are N queens in an infinite chessboard. We say two queens may attack each other if they are in the same vertical line, horizontal line or diagonal line even if there are other queens sitting between them. Now

hihocoder(第十周)二叉树(前序中序推后续)递推实现

题目 : 后序遍历 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 在参与过了美食节之后,小Hi和小Ho在别的地方又玩耍了一阵子,在这个过程中,小Ho得到了一个非常有意思的玩具——一棵由小球和木棍连接起来的二叉树! 小Ho对这棵二叉树爱不释手,于是给它的每一个节点都标记了一个标号——一个属于A..Z的大写字母,并且没有任意两个节点的标号是一样的.小Hi也瞅准了这个机会,重新巩固了一下小Ho关于二叉树遍历的基础知识~就这样,日子安稳的过了两天. 这天,小Ho正好在求解

hihocoder第16周(RMQ-ST算法)

题目链接: huangjing 思路:新学会的一种算法,RMQ(Rangle Minimum Query)从名字来看,觉得就是查询最小值的,哈哈, 大白上有仔细的讲解.dp[i][j]=min(dp[i][j-1],dp[i+(1<<(j-1))][j-1]),具体的图请看大白,真是神奇的方法.. 预处理的复杂度为O(N*logN),查询就是O(1)的复杂度. 方法二:线段树解法  复杂度为O(Q*logN). 题目: 题目1 : RMQ-ST算法 时间限制:10000ms 单点时限:1000