B - 在上厕所
OHgg 获得了一个大小等于 n \times nn×n 的正方形方阵,方针内有两个单元格被画上了星星,也就是被标记了. 这两个单元格可以在相同的位置(即同行同列).
他需要再给两个单元格画上星星,让这四个带星星的单元格表示为与坐标轴平行的矩形的四个角
例如,如果 n=4n=4 并且这个矩阵看起来是这样的 (用星号标记了两个单元格):
\begin{matrix} . & * & . & . \\ . & . & . & . \\ * & . & . & . \\ . & . & . & . \\ \end{matrix}..∗.∗...........
那么他可以这样再多给两个单元格画上星星
\begin{matrix} * & * & . & . \\ . & . & . & . \\ * & * & . & . \\ . & . & . & . \\ \end{matrix}∗.∗.∗.∗.........
如果有多个解决方案,输出任意一个都可以。
Input
第一行有一个整数 tt (1 \le t \le 4001≤t≤400). 接下来是 tt 个测试样例.
每个测试用例的第一行包含一个整数 nn (2 \le n \le 4002≤n≤400) — 矩阵的行和列的数量
接下来 nn 行分别包含 nn 个字符 '.' 或者 '*' 表示空单元格和标记单元格.
保证所有测试样例 nn 的和不超过 400400.
保证矩阵上正好有两个星号。它们可以在同一行或同一列.
保证存在解决方案.
Output
对于每个测试样里,输出 nn 行,每行 nn 个字符 — 与输入内容相对应且带有四个星号的矩阵. 如果有多个正确答案输出任意一个即可.
Example
Input
6 4 ..*. .... *... .... 2 *. .* 2 .* .* 3 *.* ... ... 5 ..... ..*.. ..... .*... ..... 4 .... .... *... *...Output
*.*. .... *.*. .... ** ** ** ** *.* *.* ... ..... .**.. ..... .**.. ..... .... .... **.. **..Sponsor
//只要不发癔症就能写对的题(别问,问就是考试没写对)
#include <iostream>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
int t;
cin >> t;
int sum1 = 0, sum2 = 0;
while (t--) {
sum1 = 0, sum2 = 0;
char map[401][401] = { 0 };
char place[401][401] = { 0 };
int n;
cin >> n;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cin >> map[i][j];
if (map[i][j] == '*') {
place[i][j] = 1;//记录地图每一点的状态
}
}
}
int x1, y1, x2, y2;
int k = 0, low = 0;
for (int i = 0; i < n; i++) {
sum1 = 0;
for (int j = 0; j < n; j++) {
if (map[i][j] == '*')
sum1++, k++;
if (sum1 == 1 && k == 1 && low == 0) {
x1 = i, y1 = j;
low = 1;
}
if (sum1 >= 1 && k == 2) {
x2 = i, y2 = j;
break;
}
}
if (sum1 == 2) break;
}
if (x1 != x2 && y1 != y2) {//俩点既不在同一水平线上也不再同一竖直线上,下面同理
map[x1][y2] = '*';
map[x2][y1] = '*';
}
else {
if (x1 == x2 && y1 == y2) {
if (x1 == 0) map[x1][y1 + 1] = '*';
else map[x1][y1 - 1] = '*';
}
else if (x1 == x2 && y1 != y2) {
if (x1 == 0) map[x1 + 1][y1] = map[x2 + 1][y2] = '*';
else map[x1 - 1][y1] = map[x2 - 1][y2] = '*';
}
else {
if (y1 == 0) map[x1][y1 + 1] = map[x2][y2 + 1] = '*';
else map[x1][y1 - 1] = map[x2][y2 - 1] = '*';
}
}
for (int i = 0; i < n; i++) {
cout << map[i];
cout << endl;
}
}
}