现在对于每个块进行如下操作:
> 翻转某个块中的牌,并且与之相邻的其余八张牌也会被翻转。
XXX
XXX
XXX
如上矩阵所示,翻转中间那块时,这九块中的牌都会被翻转一次。
请输出在对矩阵中每一块进行如上操作以后,牌面向下的块的个数。
请输出在对矩阵中每一块进行如上操作以后,牌面向下的块的个数。
数据范围: 
输入的第一行为测试用例数t(1 <= t <= 100000),
接下来t行,每行包含两个整数N,M(0 <= N, M <= 1,000,000,000)
对于每个用例输出包含一行,输出牌面向下的块的个数
5 1 1 1 2 3 1 4 1 2 2
1 0 1 2 0
又因为他说N,M(1 <= N, M <= 1,000,000,000)
所有要用long类型
import java.util.*;
public class Main{
public static void main(String args[]){
Scanner sc=new Scanner(System.in);
int a=sc.nextInt();
for(int i=1;i<=a;i++){
long A1=sc.nextLong();
long A2=sc.nextLong();
long s;
if(A1==1&&A2==1){
s=1;
}else if(A1==1){
s=A2-2;
}else if(A2==1){
s=A1-2;
}else{
s=(A1-2)*(A2-2);
}
System.out.println(s);
}
}
}
如果N == 1, M == 1,则只翻转一次,输出0;
如果N == 1, M > 1, 则首尾被翻转2次,其它 M - 2 个被翻转三次,输出 M - 2;
如果N > 1, M > 1, 则矩阵的四个角被翻转4次,四条边上除角以外的部分被翻转6次,不在边上的部分会被翻转9次,所以输出 (N - 2) * (M - 2)。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int t = sc.nextInt();
while (t-- > 0) {
long N = sc.nextLong();
long M = sc.nextLong();
if (N > M) {
long temp = N;
N = M;
M = temp;
}
if (N == 1 && M == 1) {
System.out.println(1);
} else if (N == 1 && M > 1) {
System.out.println(M - 2);
} else {
System.out.println((N - 2) * (M - 2));
}
}
}
}