#P16619. [GCPC2026]keeping cows
[GCPC2026]keeping cows
题目描述
农夫 Kiki 有 头奶牛。她的牧场可以看作一个网格,每个格子都是边长为 米的正方形。
根据德国奶牛周长协会的严格规定,奶牛必须在一个面积恰好为 平方米的封闭区域中吃草。
不幸的是,围栏供应商弄错了订单。Kiki 原本需要大量直线围栏和少量拐角围栏,但供应商送来的全部都是拐角围栏,而且数量多到牧场中都放不下。
一个拐角围栏的形状如下:
....
.O#.
.#..
....
其中:
O表示该围栏的中心;#表示围栏的两条边;.表示空格子。
每个拐角围栏都可以旋转,并可以在网格上平移,但必须始终与网格方向对齐。
你需要放置若干拐角围栏,使得存在一个由恰好 个空格子组成的四连通分量,并且该分量被围栏包围。
更严格地说,对于该分量中的每一个内部空格子,它的四个正交相邻格子都必须满足以下二者之一:
- 也属于该内部空格子的连通分量;
- 是某个围栏的一部分。
牧场大小为 ,任何围栏的一部分都不能放在牧场范围之外。

面积为 4 时的两个合法构造和一个非法构造
图 K.1:面积为 时的两个合法构造和一个非法构造。左图即样例输出;右图中的四个内部格子并不四连通,因此非法。
输入格式
输入一行一个整数 (),表示奶牛围栏内部区域必须包含的格子数。
输出格式
第一行输出两个整数 (),表示你所使用的矩形区域的高度和宽度。
接下来输出 个长度为 的字符串,只能包含字符 #、. 和 O,表示围栏的放置方案。
如果存在多种合法方案,可以输出任意一种。
样例 1
输入
4
输出
4 4
O##O
#..#
#..#
O##O
样例 2
输入
9
输出
7 9
O##OO##.#
#..###O#O
#......#.
O##O.##O.
#..##O...
O##O.....
...#.....