-->
当前位置:首页 > 题库

编程题:前缀和+枚举

Luz4年前 (2022-09-06)题库234
在附近的幼儿园,他们最近制作了一个吸引人的力量和敏捷游戏,孩子们都喜欢。
游戏的表面是一个大的平面区域,分成N×N个正方形。

孩子们把海绵状的大木棒放在水面上。立方体的边与正方形的边长度相同。当立方体放在表面上时,它的边与一些正方形对齐。一个立方体也可以放在另一个立方体上。

孩子们喜欢建造堡垒并把它们藏起来,但他们总是留下一片狼藉。因此,在关闭幼儿园之前,老师们会重新排列所有的立方体,使它们在表面上占据一个矩形,矩形中的每个正方形上正好有一个立方体。

在一次移动中,一个立方体从一个正方形的顶部移动到另一个正方形的顶部。

编写一个程序,给定曲面的状态,计算将所有立方体排列成矩形所需的最小移动次数。


### 输入格式:
第一行包含整数N和M(1≤N≤100, 1≤M≤N2),表示曲面的尺寸和当前曲面上的立方体数量。

以下M行中的每一行都包含两个整数R和C(1≤ R、C≤N),表示包含立方体的正方形的坐标。

### 输出格式:
输出最小的移动次数。假定解决方案永远存在。

### 输入样例1:
in
3 2
1 1
1 1


### 输出样例1:
out
1


### 输入样例2:
in
4 3
2 2
4 4
1 1


### 输出样例2:
out
2


### 输入样例3:
in
5 8
2 2
3 2
4 2
2 4
3 4
4 4
2 3
2 3


### 输出样例3:
out
3


在第一个示例中,将其中一个立方体从(1,1)移动到(1,2)或(2,1)就足够了。

在第三个示例中,立方体从(2,3)移动到(3,3),从(4,2)移动到(2,5),从(4,4)移动到(3,5)。






答案:若无答案欢迎评论