【AtCoder】Beginner Contest 377-C.Avoid Knight Attack

Avoid Knight Attack

题目链接

Problem Statement

There is a grid of N 2 N^2 N2 squares with N N N rows and N N N columns. Let ( i , j ) (i,j) (i,j) denote the square at the i i i-th row from the top ( 1 ≤ i ≤ N ) (1\leq i\leq N) (1iN) and j j j-th column from the left ( 1 ≤ j ≤ N ) (1\leq j\leq N) (1jN).

Each square is either empty or has a piece placed on it. There are M M M pieces placed on the grid, and the k k k-th ( 1 ≤ k ≤ M ) (1\leq k\leq M) (1kM) piece is placed on square ( a k , b k ) (a_k,b_k) (ak,bk).

You want to place your piece on an empty square in such a way that it cannot be captured by any of the existing pieces.

A piece placed on square ( i , j ) (i,j) (i,j) can capture pieces that satisfy any of the following conditions:

  • Placed on square ( i + 2 , j + 1 ) (i+2,j+1) (i+2,j+1)
  • Placed on square ( i + 1 , j + 2 ) (i+1,j+2) (i+1,j+2)
  • Placed on square ( i − 1 , j + 2 ) (i-1,j+2) (i1,j+2)
  • Placed on square ( i − 2 , j + 1 ) (i-2,j+1) (i2,j+1)
  • Placed on square ( i − 2 , j − 1 ) (i-2,j-1) (i2,j1)
  • Placed on square ( i − 1 , j − 2 ) (i-1,j-2) (i1,j2)
  • Placed on square ( i + 1 , j − 2 ) (i+1,j-2) (i+1,j2)
  • Placed on square ( i + 2 , j − 1 ) (i+2,j-1) (i+2,j1)

Here, conditions involving non-existent squares are considered to never be satisfied.

For example, a piece placed on square ( 4 , 4 ) (4,4) (4,4) can capture pieces placed on the squares shown in blue in the following figure:

How many squares can you place your piece on?

中文题意

问题陈述

有一个由 N 2 N^2 N2 个正方形组成的网格,包含 N N N 行和 N N N 列。设 ( i , j ) (i,j) (i,j) 表示从上到下第 i i i ( 1 ≤ i ≤ N ) (1\leq i\leq N) (1iN) 和从左到下第 j j j ( 1 ≤ j ≤ N ) (1\leq j\leq N) (1jN) 处的正方形。

每个方块要么是空的,要么上面放着一个棋子。网格上有 M M M 个棋子, k k k ( 1 ≤ k ≤ M ) (1\leq k\leq M) (1kM) 个棋子放置在 KaTeX parse error: Expected 'EOF', got '&' at position 4: (a &̲#95; k,b _ … 方格上。

你想把你的棋子放在一个空的正方形上,这样它就不会被任何现有的棋子所捕获。

放置在 ( i , j ) (i,j) (i,j) 方块上的棋子可以捕获满足以下任何条件的棋子:

  • 放置在 ( i + 2 , j + 1 ) (i+2,j+1) (i+2,j+1) 方块上
  • 放置在正方形 ( i + 1 , j + 2 ) (i+1,j+2) (i+1,j+2)
  • 放置在 ( i − 1 , j + 2 ) (i-1,j+2) (i1,j+2) 方框上
  • 放置在 ( i − 2 , j + 1 ) (i-2,j+1) (i2,j+1) 方块上
  • 放置在 ( i − 2 , j − 1 ) (i-2,j-1) (i2,j1) 方块上
  • 放置在正方形 ( i − 1 , j − 2 ) (i-1,j-2) (i1,j2)
  • 放置在 ( i + 1 , j − 2 ) (i+1,j-2) (i+1,j2) 方块上
  • 放置在正方形 ( i + 2 , j − 1 ) (i+2,j-1) (i+2,j1)

在这里,涉及不存在的正方形的条件被认为永远不满足。

例如,放置在方格 ( 4 , 4 ) (4,4) (4,4) 上的棋子可以捕获放置在下图中蓝色方格上的棋子:

你能把棋子放在几个方格上?

Constraints

  • 1 ≤ N ≤ 1 0 9 1\leq N\leq10^9 1N109
  • 1 ≤ M ≤ 2 × 1 0 5 1\leq M\leq2\times10^5 1M2×105
  • 1 ≤ a k ≤ N , 1 ≤ b k ≤ N ( 1 ≤ k ≤ M ) 1\leq a_k\leq N,1\leq b_k\leq N\ (1\leq k\leq M) 1akN,1bkN (1kM)
  • ( a k , b k ) ≠ ( a l , b l ) ( 1 ≤ k < l ≤ M ) (a_k,b_k)\neq(a_l,b_l)\ (1\leq k\lt l\leq M) (ak,bk)=(al,bl) (1k<lM)
  • All input values are integers.

Input

The input is given from Standard Input in the following format:

N N N M M M

a 1 a_1 a1 b 1 b_1 b1

a 2 a_2 a2 b 2 b_2 b2

⋮ \vdots

a M a_M aM b M b_M bM

Output

Print the number of empty squares where you can place your piece without it being captured by any existing pieces.

Sample Input 1

8 6
1 4
2 1
3 8
4 5
5 2
8 3

Sample Output 1

38

The existing pieces can capture pieces placed on the squares shown in blue in the following figure:

Therefore, you can place your piece on the remaining 38 38 38 squares.

Sample Input 2

1000000000 1
1 1

Sample Output 2

999999999999999997

Out of 1 0 18 10^{18} 1018 squares, only 3 3 3 squares cannot be used: squares ( 1 , 1 ) (1,1) (1,1), ( 2 , 3 ) (2,3) (2,3), and ( 3 , 2 ) (3,2) (3,2).

Note that the answer may be 2 32 2^{32} 232 or greater.

Sample Input 3

20 10
1 4
7 11
7 15
8 10
11 6
12 5
13 1
15 2
20 10
20 15

Sample Output 3

338

解法

这道题目大意,棋子的攻击位置是一个“日”字型的的走法,如果当前位置上有元素,则“日”字型的位置上都不能放元素。现在要我们统计还有多少个位置可以放元素。

使用八连通日字型分量的形式计算哪个位置不能放棋子,并且使用一个集合将所有不能放棋子的位置存起来。最后使用总的位置个数减去集合的长度就可以判断出有多少个位置还可以放棋子。

因为这道题可用的方格数量高达 1 0 18 10^{18} 1018 个,直接使用二维数组来存的话有可能会爆掉,所以我们使用一个集合来存储已经被占用的下标即可(以数对的形式存储)。

typedef long long LL;
LL n, m;
set<PII> s;
typedef pair<int, int> PII;
int dxr[8] = {-2, -1, 1, 2, 2, 1, -1, -2};
int dyr[8] = {1, 2, 2, 1, -1, -2, -2, -1};void solved() {/* your code */cin >> n >> m;while(m --) {int x, y;cin >> x >> y;s.insert({x ,y});for (int i = 0; i < 8; i ++) {// 依次遍历八个方向int a = x + dxr[i], b = y + dyr[i];// 如果在范围内,就把下一个位置加入集合if(a > 0 && a <= n && b > 0 && b <= n) {s.insert({a, b});}}}// 答案等于棋盘大小 - 集合的长度cout << n * n - s.size() << endl;
}

总结

这道题于昨天的题相比数据明显要大,不能使用数组标记法去做,合理的使用唯一标记法,是我们做题的便捷手段。

这道题着重练习日字型八连通分量,题目不难,但思路重要。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/9561.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

sizeof和strlen区分,(好多例子)

sizeof算字节大小 带\0 strlen算字符串长度 \0之前

Javascript中如何实现函数缓存?函数缓存有哪些应用场景?

#一、是什么 函数缓存&#xff0c;就是将函数运算过的结果进行缓存 本质上就是用空间&#xff08;缓存存储&#xff09;换时间&#xff08;计算过程&#xff09; 常用于缓存数据计算结果和缓存对象 解释 const add (a,b) > ab; const calc memoize(add); // 函数缓存…

MATLAB实现智能水滴算法(Intelligent Water Drops Algorithm, IWDA)

1.智能水滴算法介绍 智能水滴算法&#xff08;Intelligent Water Drops Algorithm&#xff0c;IWDA&#xff09;是一种基于水滴特性的智能优化算法&#xff0c;它借鉴了水滴在自然界中的运动和形态变化规律&#xff0c;通过模拟水滴的形成、发展和消亡过程&#xff0c;实现问题…

(Go基础)Go的运行流程步骤与包的概念

1. 快速入门 所有的go开发&#xff0c;都必须存在并包含在某一个包内 .go 是go语言程序的后缀名 1.1 编译 通过使用 go build 命令对该go文件进行编译&#xff0c;生成.exe文件 1.2 运行 运行刚刚生成出来的test.exe文件既可&#xff0c;不过并不不是双击&#xff0c;而是在…

AI 写作(三)文本生成算法:创新与突破(3/10)

一、生成式与判别式模型&#xff1a;AI 写作的基石 &#xff08;一&#xff09;区别与特点 生成式模型和判别式模型在多个方面存在明显差异。在优化准则上&#xff0c;生成式模型致力于学习联合概率分布&#xff0c;而判别式模型则专注于建立输入数据和输出之间的关系&#xf…

ubuntu下使用pocketsphinx进行语音识别(包含交叉编译)

文章目录 前言一、pocketsphinx的介绍二、ubuntu下编译三、使用示例1.模型选择2.代码示例3.自定义字典 四、交叉编译总结 前言 由于工作需要语音识别的功能&#xff0c;环境是在linux arm版上&#xff0c;所以想先在ubuntu上跑起来看一看&#xff0c;就找了一下语音识别的开源…

中国自主品牌荣耀时刻:海豹荣获欧洲车身大奖

近日&#xff0c;在德国巴特瑙海姆举行的2024欧洲车身大会上&#xff0c;比亚迪海豹凭借其卓越的车身架构设计、创新技术和美学设计&#xff0c;一举斩获了本次大赛第三名的殊荣。 这不仅是中国自主品牌在欧洲车身大会上的首次获奖&#xff0c;而且也是比亚迪技术创新与实力在国…

RocketMQ 广播消息

所谓的广播消息就是发送的一条消息会被多个消费者收到。 ⼴播是向主题&#xff08; topic &#xff09;的所有订阅者发送消息。订阅同⼀个 topic 的多个消费者&#xff0c;能全量收到⽣产者发送的所有消息。 生产者发送了10个order&#xff0c;每个order里面有5个消息&#xff…

如何实现智慧园区的节能降耗?

江园科技智慧园区实现智慧园区节能降耗可以从以下几个方面入手&#xff1a; 能源监测与管理系统 - 安装智能电表、水表和气表等设备&#xff0c;实时精准地监测园区内各区域、各企业及各设备的能源消耗情况&#xff0c;如电量的峰谷时段使用量、用水量的波动等。这些数据会传输…

索引【MySQL】

文章目录 聚簇索引 VS 非聚簇索引索引MySQL与磁盘交互的基本单位主键索引索引操作唯一索引的创建普通索引的创建复合索引 索引创建原则 聚簇索引 VS 非聚簇索引 MyISAM存储引擎 - 主键索引结构 MyISAM存储引擎同样采用B树作为索引的基本数据结构 与InnoDB存储引擎的B树不同的…

CDH大数据平台部署

二、CDH简介 全称Cloudera’s Distribution Including Apache Hadoop。 hadoop的版本 (Apache、CDH、Hotonworks版本) 在公司中一般使用cdh多一些&#xff08;收费的&#xff09;、也有公司使用阿里云大数据平台、微软的大数据平台。 国内也有一些平台&#xff1a;星环大数…

如何删除苹果手机所有照片:彻底清理指南

随着时间的推移&#xff0c;我们的iPhone往往会积累大量照片&#xff0c;这些照片占据了大量存储空间并可能影响设备性能。有时&#xff0c;为了快速释放空间或重置手机内容&#xff0c;您可能需要了解如何删除苹果手机所有照片。别担心&#xff0c;本文将向你讲解如何删除苹果…

JAVA开源项目 服装销售平台 计算机毕业设计

博主说明&#xff1a;本文项目编号 T 054 &#xff0c;文末自助获取源码 \color{red}{T054&#xff0c;文末自助获取源码} T054&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析…

Spire.PDF for .NET【页面设置】演示:获取 PDF 文件中的页数

计算 PDF 文件中的页数对于各种目的都至关重要&#xff0c;例如确定文档长度、组织内容和评估打印要求。除了使用 PDF 查看器了解页数信息外&#xff0c;您还可以通过编程自动执行该任务。在本文中&#xff0c;您将学习如何使用C#通过Spire.PDF for .NET获取 PDF 文件中的页数。…

面试总结!

OSI七层模型&#xff1a; 什么是OSI七层模型&#xff1f; 我们需要了解互联网的本质是一系列的网络协议&#xff0c;这个协议就叫做OSI协议&#xff08;开放系统互联(Open System Interconnection&#xff09;&#xff09;&#xff0c;它是由ISO&#xff08;国际标准化组织&…

LeetCode:102. 二叉树的层序遍历(java)

目录 题目描述: 代码: 第一种: 第二种: TreeNode: LinkedListNode: 题目描述: 给你二叉树的根节点 root &#xff0c;返回其节点值的 层序遍历 。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 示例 1&#xff1a; 输入&#xff1a;root [3,9,…

R语言实战——一些批量对地理数据进行操作的方法

各位朋友在进行数据处理时&#xff0c;当有多张栅格影像时&#xff0c;如果我们都要进行同一操作时&#xff0c;一张一张做很繁琐&#xff0c;用ArcGIS模型构建器是一种比较好的方法。当然&#xff0c;今天小编新学了R语言上面进行批量裁剪&#xff0c;一起来学习一下吧&#x…

TEMU测评:在挑战与机遇中寻求突破

近年来&#xff0c;TEMU&#xff08;由拼多多推出的海外电商平台&#xff09;在全球范围内迅速崛起&#xff0c;特别是在美国市场&#xff0c;其以极具竞争力的价格和丰富的商品种类吸引了大量海外消费者。然而&#xff0c;随着市场竞争的加剧和外部环境的变化&#xff0c;TEMU…

BIM 地铁站智能可视化应用

运用图扑数字孪生结合建筑信息建模&#xff08;BIM&#xff09;技术&#xff0c;提供地铁站结构和设施的全方位三维可视化展示。支持施工方案优化、进度管理及协同操作&#xff0c;提高设计精度和施工效率&#xff0c;保障地铁项目的全生命周期管理。

C++研发笔记12——C语言程序设计初阶学习笔记10

本篇笔记是一篇练习文章&#xff0c;是对第二部分《初识C语言》的一个回顾&#xff0c;从而结束第二部分的学习。 题目一 关于C语言关键字说法正确的是&#xff1a;( ) A.关键字可以自己创建 B.关键字不能自己创建 C.关键字可以做变量名 D.typedef不是关键字 【参考答案…