目标是将 n 个相同的正方形拼图块全部摆放在无限大的方格网格中,每个拼图块恰好占据一个格子,且互不重叠。摆放完成后,相邻拼图块之间的每条共享边会产生一个完整的星形图案。我们需要最大化这些共享边的数量,即星形图案的总数。
基本思路
尽量将拼图块排列成接近矩形的形状,这样可以最大化内部相邻边的数量。如果拼图块不能恰好排成一个完整矩形,多出的块可以放在矩形的一侧(例如作为新的一列,只放多出的那几行),这样也能增加额外的共享边。
枚举摆放的行数
设我们决定将拼图块摆成 i 行(1≤i≤n),那么尽可能让每一行的块数相等。令 j=⌊n/i⌋ 表示除最后可能多出的列之外,每行有 j 个拼图块。此时可以填满一个 i×j 的矩形,剩余 r=nmodi 个拼图块(0≤r<i)。
小明有 n 个相同的正方形拼图块,每个拼图块的四条边上各有一个半星形凸起。当两个拼图块在平面上边与边完全贴合放置时,它们贴合边上的两个半星形凸起会恰好拼合成一个完整的星形图案。
小明希望将这 n 个拼图块全部摆放在无限大的方格网格内,每个拼图块恰好占据一个格子,且任意两个拼图块不能重叠。摆放完成后,所有相邻拼图块之间的共享边上都会产生一个完整的星形图案。靠在边缘没有邻居的边则不会产生图案。
小明可以自由决定拼图块的摆放方式,目标是最多能获得多少个完整的星形图案。请你帮他计算这个最大值。
拼图块的数量 n 满足 1≤n≤106。
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册