https://www.luogu.org/problem/show?pid=1101#sub
题目描述
给一nXn的字母方阵,内可能蕴含多个“yizhong”单词。单词在方阵中是沿着同一方向连续摆放的。摆放可沿着8个方向的任一方向,同一单词摆放时不再改变方向,单词与单词之间[color=red]可以[/color]交叉,因此有可能共用字母。输出时,将不是单词的字母用“*”代替,以突出显示单词。例如:
输入:
8 输出:
qyizhong *yizhong
gydthkjy gy******
nwidghji n*i*****
orbzsfgz o**z****
hhgrhwth h***h***
zzzzzozo z****o**
iwdfrgng i*****n*
yyyygggg y******g
输入输出格式
输入格式:
第一行输入一个数n。(7<=n<=100)。
第二行开始输入nXn的字母矩阵。
输出格式:
突出显示单词的nXn矩阵。
输入输出样例
输入样例#1:
7
aaaaaaa
aaaaaaa
aaaaaaa
aaaaaaa
aaaaaaa
aaaaaaa
aaaaaaa
输出样例#1:
*******
*******
*******
*******
*******
*******
******* 没什么好说的~~~洛谷字符串有毒~
#include <algorithm>
#include <iostream> using namespace std; int n,mark[][];
int fx[]={,,,,,-,-,-};
int fy[]={,-,,,-,,,-};
char yz[]= {'y','i','z','h','o','n','g'},word[][]; void print(int x,int y,int drict)
{
int cnt=,xx=x,yy=y;
for(int i=;i<;i++)
{
if(word[x][y]==yz[i]) cnt++;
else break;
x+=fx[drict];y+=fy[drict];
}
if(cnt!=) return ;
for(int i=;i<;i++)
{
mark[xx][yy]=;
xx+=fx[drict];yy+=fy[drict];
}
} int main()
{
cin>>n;
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
cin>>word[i][j];
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
if(word[i][j]=='y')
for(int k=;k<;k++)
if(word[i+fx[k]][j+fy[k]]=='i') print(i,j,k);
for(int i=;i<=n;i++)
{
for(int j=;j<=n;j++)
if(mark[i][j]) cout<<word[i][j];
else cout<<'*';
cout<<endl;
}
return ;
}