题目
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
*.*. .... *.*. .... ** ** ** ** *.* *.* ... ..... .**.. ..... .**.. ..... .... .... **.. **..
代码
#include<bits/stdc++.h>
#include <iostream>
#include <cstdio>
#include <math.h>
using namespace std;int main()
{int t,n;cin >>t;while(t--){char a[405][405]={0};int ai[2]={0},bi[2]={0};cin >>n;int i,j;int a1=0,b1=0;for(i=0;i<n;i++)for(j=0;j<n;j++){cin >>a[i][j];if(a[i][j]=='*'){ai[a1++]=i;//储存*的横纵坐标bi[b1++]=j;}}if(bi[0]==bi[1]&&bi[0]==n-1)/.*/.*这种情况{a[ai[0]][bi[0]-1]='*';a[ai[1]][bi[0]-1]='*';}else if(bi[0]==bi[1]&&bi[0]==0)题中n==4时{a[ai[0]][bi[0]+1]='*';a[ai[1]][bi[0]+1]='*';}else if(bi[0]==bi[1])/在中间时{a[ai[0]][bi[0]+1]='*';a[ai[1]][bi[0]+1]='*';}else if(ai[0]==ai[1]&&ai[0]==0)//题中n==3时{a[ai[0]+1][bi[0]]='*';a[ai[0]+1][bi[1]]='*';}else if(ai[0]==ai[1]&&ai[0]==n-1)//俩*号在底边且挨着{a[ai[0]-1][bi[0]]='*';a[ai[0]-1][bi[1]]='*';}else if(ai[0]==ai[1])//在中间挨着{a[ai[0]-1][bi[0]]='*';a[ai[0]-1][bi[1]]='*';}else{a[ai[0]][bi[0]]='*';//不挨着的情况a[ai[1]][bi[0]]='*';a[ai[0]][bi[1]]='*';a[ai[1]][bi[1]]='*';}for(i=0;i<n;i++){for(j=0;j<n;j++)//输出图像cout << a[i][j] ;cout <<endl;}}return 0;
}