第
小红想选出四个棋子,对应坐标分别为
,使得这四个坐标构成一个正方形,小红有多少种方案。
如果两个方案有任意一个棋子的坐标不同,那么就认为是两种不同的方案。
第一行一个正整数,代表棋盘的大小。
接下来行,每行一个长度为
的字符串,仅包含 '.' 和 'X'。
一个整数,代表最终的方案数
4 4 XX.. XXX. .X.X ..X.
3
第一个正方形:(1, 1) (1, 2) (2, 1) (2, 2)第二个正方形:(2, 3) (3, 2) (3, 4) (4, 3)第三个正方形:(1, 2) (2, 1) (2, 3) (3, 2)
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
int res = 0;
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
while (in.hasNext()) { // 注意 while 处理多个 case
int a = in.nextInt();
int b = in.nextInt();
String[][] x = new String[a][b];
for (int i = 0; i < a; i++) {
String hang = in.next();
for (int j = 0; j < b; j++) {
x[i][j] = String.valueOf(hang.charAt(j));
}
}
for (int i = 0; i < a; i++) {
for (int j = 0; j < b; j++) {
res += numofcycle(x, i, j, a, b);
}
}
System.out.println(res);
}
}
public static int numofcycle(String[][] a,int x,int y,int xmax,int ymax){
int res = 0;
if(a[x][y].equals("."))
return 0;
int max = xmax>ymax?xmax:ymax;
for(int i = x+1;i<max;i++){
for(int j = y;j<max;j++){
int xlen= i-x;
int ylen = j-y;
try{
if(a[i][j].equals("X") && a[x-ylen][y+xlen].equals("X") && a[i-ylen][j+xlen].equals("X")){
res++;
}
}catch (Exception e ){
}
}
}
return res;
}
}