public static void Solve() { var(N, M, K) = Scanner.Scan <long, long, long>(); const long p = (long)1e9 + 7; var all = N * M; var cx = N * N % p; cx *= Enumeration.CombinationCount(all - 2, K - 2, p); cx %= p; var nx = 0L; for (var i = 1; i < M; i++) { nx = (nx + i * (M - i) % p) % p; } nx = nx * cx % p; var cy = M * M % p; cy *= Enumeration.CombinationCount(all - 2, K - 2, p); cy %= p; var ny = 0L; for (var i = 1; i < N; i++) { ny = (ny + i * (N - i) % p) % p; } ny = ny * cy % p; var answer = (nx + ny) % p; Console.WriteLine(answer); }
public static void Solve() { var(W, H) = Scanner.Scan <int, int>(); var p = (int)1e9 + 7; Console.WriteLine(Enumeration.CombinationCount(W + H - 2, W - 1, p)); }
public static void Solve() { var N = Scanner.Scan <int>(); const int max = (int)1e5 + 1; const int p = 998244353; var G = new ModuloInteger[max]; G[0] = 1; for (var i = 1; i < max; i++) { G[i] = G[i - 1] * (2 * i - 1); } var freq = new int[max]; for (var i = 0; i < 2 * N; i++) { var H = Scanner.Scan <int>(); freq[H]++; } var queue = new Queue <ModuloInteger[]>(); queue.Enqueue(new ModuloInteger[] { 1 }); foreach (var n in freq) { if (n < 2) { continue; } var list = new ModuloInteger[n / 2 + 1]; for (var i = 0; i * 2 <= n; i++) { list[i] = Enumeration.CombinationCount(n, i * 2, p) * G[i]; if (i % 2 == 1) { list[i] = -list[i]; } } queue.Enqueue(list); } while (queue.Count > 1) { var list1 = queue.Dequeue(); var list2 = queue.Dequeue(); queue.Enqueue(Convolution.Execute(list1, list2).ToArray()); } ModuloInteger answer = 0; var last = queue.Dequeue(); for (var i = 0; i < last.Length; i++) { answer += last[i] * G[N - i]; } Console.WriteLine(answer); }
public static void Solve() { var(N, M) = Scanner.Scan <int, int>(); const int p = (int)1e9 + 7; var answer = Enumeration.PermutationCount(M, N, p); for (var i = 1; i <= N; i++) { var tmp = Enumeration.CombinationCount(N, i, p) * Enumeration.PermutationCount(M - i, N - i, p); if (i % 2 == 0) { answer += tmp; } else { answer -= tmp; } if (answer < 0) { answer += p; } answer %= p; } answer *= Enumeration.PermutationCount(M, N, p); answer %= p; Console.WriteLine(answer); }
public static void Solve() { var N = Scanner.Scan <int>(); var K = Scanner.Scan <int>(); var p = (int)1e9 + 7; var answer = Enumeration.CombinationCount(N - 1 + K, N - 1, p); Console.WriteLine(answer); }
public static void Solve() { var(N, K) = Scanner.Scan <int, int>(); const int p = (int)1e9 + 7; for (var i = 1; i <= K; i++) { var a = Enumeration.CombinationCount(N - K + 1, i, p); var b = Enumeration.CombinationCount(K - 1, i - 1, p); Console.WriteLine(a * b % p); } }
public static void Solve() { var(R, C) = Scanner.Scan <long, long>(); var(X, Y) = Scanner.Scan <long, long>(); var(D, L) = Scanner.Scan <long, long>(); var p = (int)1e9 + 7; long Calc(long x, long y, long d, long l, long mod) { if (x * y < d + l) { return(0); } var ret = Enumeration.CombinationCount(x * y, d, mod); ret *= Enumeration.CombinationCount(x * y - d, l, mod); ret %= mod; return(ret); } var pattern = ((R - X + 1) * (C - Y + 1)) % p; var comb = 0L; if (D + L == X * Y) { comb = Enumeration.CombinationCount(D + L, D, p); } else { comb = Calc(X, Y, D, L, p); comb = (comb + p - (Calc(X - 1, Y, D, L, p) * 2) % p) % p; comb = (comb + p - (Calc(X, Y - 1, D, L, p) * 2) % p) % p; comb = (comb + (Calc(X - 1, Y - 1, D, L, p) * 4) % p) % p; comb = (comb + Calc(X - 2, Y, D, L, p)) % p; comb = (comb + Calc(X, Y - 2, D, L, p)) % p; comb = (comb + p - (Calc(X - 2, Y - 1, D, L, p) * 2) % p) % p; comb = (comb + p - (Calc(X - 1, Y - 2, D, L, p) * 2) % p) % p; comb = (comb + Calc(X - 2, Y - 2, D, L, p)) % p; } var answer = (comb * pattern) % p; Console.WriteLine(answer); }
public static void Solve() { var HWAB = Console.ReadLine().Trim().Split(' ').Select(long.Parse).ToArray(); var(H, W, A, B) = (HWAB[0], HWAB[1], HWAB[2], HWAB[3]); var p = (long)1e9 + 7; var answer = 0L; for (var i = 0; i < H - A; i++) { var way1 = Enumeration.CombinationCount(i + B - 1, B - 1, p); var way2 = Enumeration.CombinationCount(H - i - 1 + W - B - 1, W - B - 1, p); answer += (way1 * way2) % p; answer %= p; } Console.WriteLine(answer); }
public static void Solve() { var(N, M, K) = Scanner.Scan <int, int, int>(); const long p = 998244353; var answer = 0L; for (var k = 0; k <= K; k++) { var comb = M * Enumeration.CombinationCount(N - 1, k, p); comb %= p; comb *= Enumeration.Power(M - 1, N - 1 - k, p); comb %= p; answer += comb; answer %= p; } Console.WriteLine(answer); }
public static void Solve() { var(X, Y) = Scanner.Scan <int, int>(); const int p = (int)1e9 + 7; var step = (X + Y); if ((step % 3) != 0) { Console.WriteLine(0); return; } var nm = step / 3; var n = X - nm; var m = Y - nm; if (n < 0 || m < 0) { Console.WriteLine(0); return; } Console.WriteLine(Enumeration.CombinationCount(n + m, n, p)); }
public static void Solve() { var(N, K) = Scanner.Scan <int, int>(); var A = Scanner.ScanEnumerable <int>().ToArray(); var p = (int)1e9 + 7; Array.Sort(A); var answer = 0L; for (var i = 0; i <= N - K; i++) { answer += (-A[i] * Enumeration.CombinationCount(N - i - 1, K - 1, p) + p) % p; answer %= p; } for (var i = K - 1; i < N; i++) { answer += A[i] * Enumeration.CombinationCount(i, K - 1, p) % p; answer %= p; } Console.WriteLine(answer); }