在N*M的草地上,提莫种了K个蘑菇,蘑菇爆炸的威力极大,兰博不想贸然去闯,而且蘑菇是隐形的.只 有一种叫做扫描透镜的物品可以扫描出隐形的蘑菇,于是他回了一趟战争学院,买了2个扫描透镜,一个 扫描透镜可以扫描出(3*3)方格中所有的蘑菇,然后兰博就可以清理掉一些隐形的蘑菇.
问:兰博最多可以清理多少个蘑菇?
输入描述:
第一行三个整数:N,M,K,(1<=N,M<=20,K<=100),N,M代表草地的大小;
接下来K行,每行两个整数x,y(1<=x<=N,1<=y<=M).代表(x,y)处提莫种了一个蘑菇。
一个方格可以种无穷个蘑菇。
输出描述:
输出一行,在这一行输出一个整数,代表兰博最多可以清理多少个蘑菇。
注:对于每个方格如果其中有多个蘑菇,那么每次扫描只能清理一个。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while(in.hasNext()){
int n = in.nextInt();
int m = in.nextInt();
int k = in.nextInt();
if(n<3)
n=3;
if(m<3)
m=3;
int[][] num = new int[n][m];
for(int i=0;i<k;i++){
int x = in.nextInt();
int y = in.nextInt();
num[x-1][y-1]++;
}
int[] first = new int[3];
int[] second = new int[3];
scan(num,first);
clear(num,first);
scan(num,second);
System.out.println(first[0]+second[0]);
}
}
private static void clear(int[][] num, int[] first) {
int i = first[1];
int j = first[2];
for(int u=i;u<i+3;u++)
for(int v=j;v<j+3;v++){
if(num[u][v]>0)
num[u][v]--;
}
}
private static void scan(int[][] num, int[] first) {
int n = num.length;
int m = num[0].length;
int i,j,max;
for(i=0;i<n-2;i++)
for(j=0;j<m-2;j++){
max = 0;
for(int u=i;u<i+3;u++)
for(int v=j;v<j+3;v++){
if(num[u][v]>0)
max++;
}
if(max>first[0]){
first[0] = max;
first[1] = i;
first[2] = j;
}
}
}
}