时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 32 M,其他语言64 M
64bit IO Format: %lld
题目描述
JOI先生的收藏室里有一张巨大的桌子,上面有许多稀有的硬币。为了清理桌子,他要重新摆放硬币。
桌面可视为
的网格。网格上往下数第i行(
),左往右数第j列(
)的格子坐标记为(i,j)。
JOI先生有2N枚硬币。初始时,第i枚
硬币被放在坐标为
的格子里。JOI先生的目标是在每个满足
的格子(x,y)上恰好放一枚硬币。为了不损坏硬币,他能做的唯一一个操作是钦定一枚硬币然后将其移动到相邻的一个格子中(我们说两个格子相邻,当且仅当这两个格子有公共边)。在移动硬币的过程中,允许两个硬币处在同一个格子中。JOI先生希望通过尽量少的操作次数完成目标。
现在给出硬币的数量和初始时所在的位置,编写一个程序,计算完成JOI先生目标所需的最少操作次数。
输入描述:
从标准输入中读取数据。
第一行一个整数N。
接下来2N行,第i行为两个整数
和
。
输出描述:
输出数据到标准输出中。
输出一行一个整数,表示完成目标所需的最少操作次数。
示例1
输入
复制
3
0 0
0 4
4 0
2 1
2 5
-1 1
说明
一种合法的移动方案是:
一号硬币:
%20%5Crightarrow(1%2C0)%20%5Crightarrow(1%2C1)%20%5Crightarrow(1%2C2)%E2%80%8B)
二号硬币:
%20%5Crightarrow(1%2C4)%20%5Crightarrow(1%2C3)%20%5Crightarrow(2%2C3)%20%5Crightarrow(3%2C3)%20%5Crightarrow(3%2C2))
三号硬币:
%20%5Crightarrow(4%2C1)%20%5Crightarrow(3%2C1))
五号硬币:
%20%5Crightarrow(2%2C4)%20%5Crightarrow(2%2C3)%20%5Crightarrow(2%2C2))
六号硬币:
%20%5Crightarrow(0%2C1)%20%5Crightarrow(1%2C1))
可以证明JOI先生不能用少于15次移动完成目标。
示例2
输入
复制
4
2 1
2 1
2 1
3 1
3 1
3 1
3 1
3 1
示例3
输入
复制
5
1000000000 1000000000
-1000000000 1000000000
-1000000000 -1000000000
1000000000 -1000000000
-1 -5
-2 2
2 8
4 7
-2 5
7 3
备注:
对于所有输入数据,有

。
CC-BY-SA,感谢LOJ分享,译文来自 https://loj.ac/problem/3013