题目及输入输出描述如图所示

alt 核心思路

要形成回文串,则字符串的首尾字符必相同,最简单的方式就是让中间的数字都相同,只有首尾不同,例如:00,11,1001,01110,因此,从矩阵的任意位置出发,只需找到距离它最近的相同元素,并保证中间元素都相同,即可构成回文串,即矩阵中元素'0'和'1'的个数只要出现两次及以上就必定能构成回文字符串。

代码如下

```#include<bits/stdc++.h>
using namespace std;
#define int long long
int m,n;
signed main()
{
    int T;
    cin>>T;
    while(T--)
    {
        int n,m;
        cin>>n>>m;
        string s[n];
        int f[2]={0};
        for(int i=0;i<n;i++)
        {
            cin>>s[i];
            for(auto &p:s[i])
                if(p=='0')
                    f[0]++;
                else
                    f[1]++;
        }
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<m;j++)
            {
                if(s[i][j]=='0')
                {
                    if(f[0]>=2)
                        cout<<'Y';
                    else
                        cout<<'N';
                }
                else
                {
                    if(f[1]>=2)
                        cout<<'Y';
                    else
                        cout<<'N';
                }
            }
            cout<<'\n';
        }
    }
    return 0;
}