现在对于每个块进行如下操作:
> 翻转某个块中的牌,并且与之相邻的其余八张牌也会被翻转。
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)); } } } }