タイトルリンク:P1101
この質問(⊙o⊙)...、Konjacは検索によって書き込まれることはないため、書かれていないため、直接の暴力
は質問からわかります。8つの方向があり、条件を満たす8つの方向すべてを出力する必要があります。問題彼が繰り返し位置を使用できる可能性があるという理由だけで、検索を使用する場合、この問題を解決する方法を見つける必要があります。私は
方法を取りません:
最初の文字、つまりこの文字を見つけた後にyを見つけるだけでよいので、8をトラバースします。記録し、その後、方向で見たキャラクターが満たさyizhong配列ではない、会っ
コード
import java.util.*;
public class Main {
static int n;
static char a[][];
static boolean b[][];
static char key[] = new String("yizhong").toCharArray();
static int xx[] = new int[]{-1,-1,-1,0,0,1,1,1};
static int yy[] = new int[]{-1,0,1,-1,1,-1,0,1};
static void check(int x,int y){
for(int i = 0;i < 8;i++){
int j = 0;
int p = x;
int q = y;
for(j = 1;j < 7;j++){
if(p+xx[i]>=0 && p+xx[i]<n && q+yy[i]>=0 && q+yy[i]<n && (a[p+xx[i]][q+yy[i]] == key[j])){
p = p+xx[i];
q = q+yy[i];
}
else
break;
}
if(j == 7){
for(int k = 0;k < 7;k++){
b[p][q] = true;
p = p-xx[i];
q = q-yy[i];
}
}
}
}
public static void main(String args[]){
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
a = new char[n][n];
b = new boolean[n][n];
for(int i = 0;i < n;i++)
for(int j = 0;j < n;j++)
b[i][j] = false;
for(int i = 0;i < n;i++)
a[i] = sc.next().toCharArray();
for(int i = 0;i < n;i++)
for(int j = 0;j < n;j++)
if(a[i][j] == 'y')
check(i,j);
for(int i = 0;i < n;i++){
for(int j = 0;j < n;j++){
if(b[i][j])
System.out.print(a[i][j]);
else
System.out.print("*");
}
System.out.println();
}
}
}