01回文
01回文
https://ac.nowcoder.com/acm/contest/120562/I
题目及输入输出描述如图所示
核心思路
要形成回文串,则字符串的首尾字符必相同,最简单的方式就是让中间的数字都相同,只有首尾不同,例如: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;
}
查看1道真题和解析
