这题我都……
by sss7020 @ 2019-04-17 13:14:47
```cpp
#include<iostream>
#include<string>
#include<cstring>
using namespace std;
const string FIND="yizhong";
string a[105];
bool flag[105][105];
int n;
void check(int x,int y,int fx){
if(fx==1){
for(int i=y;i<y+7;i++){
if(i>=n)return;
if(a[x][i]!=FIND[i-y])return;
}
for(int i=y;i<y+7;i++){
flag[x][i]=1;
}
return;
}
if(fx==2){
for(int i=y;i>y-7;i--){
if(i<0)return;
if(a[x][i]!=FIND[y-i])return;
}
for(int i=y;i>y-7;i--){
flag[x][i]=1;
}
return;
}
if(fx==3){
for(int i=x;i<x+7;i++){
if(i>=n)return;
if(a[i][y]!=FIND[i-x])return;
}
for(int i=x;i<x+7;i++){
flag[i][y]=1;
}
return;
}
if(fx==4){
for(int i=x;i>x-7;i--){
if(i<0)return;
if(a[i][y]!=FIND[x-i])return;
}
for(int i=x;i>x-7;i--){
flag[i][y]=1;
}
return;
}
if(fx==5){
for(int i=0;i<7;i++){
if(x+i>=n||y+i>=n)return;
if(a[x+i][y+i]!=FIND[i])return;
}
for(int i=0;i<7;i++){
flag[x+i][y+i]=1;
}
return;
}
if(fx==6){
for(int i=0;i<7;i++){
if(x-i<0||y-i<0)return;
if(a[x-i][y-i]!=FIND[i])return;
}
for(int i=0;i<7;i++){
flag[x-i][y-i]=1;
}
return;
}
if(fx==7){
for(int i=0;i<6;i++){
if(x-i<0||y+i>=n)return ;
if(a[x-i][y+i]==FIND[i])return;
}
for(int i=0;i<6;i++){
flag[x-i][y+i]=1;
}
return;
}
if(fx==8){
for(int i=0;i<6;i++){
if(x+i>=n||y-i<0)return;
if(a[x+i][y-i]==FIND[i])return;
}
for(int i=0;i<6;i++){
flag[x+i][y-i]=1;
}
return;
}
}
void solve(int x,int y){
for(int i=1;i<=8;i++){
check(x,y,i);
}
}
int main(){
memset(flag,0,sizeof(flag));
cin>>n;
for(int i=0;i<n;i++)
cin>>a[i];
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(a[i][j]=='y')solve(i,j);
}
}
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(flag[i][j]==1)cout<<a[i][j];
else cout<<'*';
}
cout<<endl;
}
return 0;
}
```
by sss7020 @ 2019-04-17 13:16:06