小强今天体检,其中有一个环节是测视力
小强看到的视力表是一张的表格,但是由于小强视力太差,他无法看清表格中的符号。不过热爱数学的他给自己出了这样一个问题:假设现在有a个向上的符号,b个向下的符号,c个向左的符号,d个向右的符号,把这些符号填到视力表中,总共有多少种可能的情况呢?
第一行输入五个数N, a, b, c, d保证
输出一个数字,表示答案由于结果可能很大,只需输出对998244353取模之后的结果即可
2 3 1 0 0
4
共有如下四种情况上上 上上上下 下上上下 下上上上 上上
2 2 1 1 0
12
2 1 1 1 1
24
数据保证,且对于的数据,N = 2对于的数据,对于的数据,对于的数据,
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.math.BigInteger; import java.util.Arrays; public class Main { static int mod = 998244353; public static void main(String[] args) throws InterruptedException, IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int[] s = Arrays.stream(br.readLine().split(" ")).mapToInt(Integer::parseInt).toArray(); int N = s[0]; int a = s[1]; int b = s[2]; int c = s[3]; BigInteger t = cal(N * N - a - b - c + 1, N * N); BigInteger ka = cal(1, a); BigInteger kb = cal(1, b); BigInteger kc = cal(1, c); t = t.divide(ka.multiply(kb.multiply(kc))); t = t.mod(new BigInteger(mod + "")); System.out.println(t.toString()); } public static BigInteger cal(int a, int b) { BigInteger t = new BigInteger(1 + ""); for (int i = a; i <= b; i++) { t = t.multiply(new BigInteger(i + "")); } return t; } }