/// <summary> /// メイン処理をここに書く /// </summary> void SolveOne() { int n = sc.nextInt(); int t = sc.nextInt(); int[] d = sc.nextInt(n); Array.Sort(d); int[] dp = new int[n]; for (int i = 0; i < n; i++) { int lb = -1; int ub = i; while (ub - lb > 1) { int mid = (ub + lb) / 2; if (d[mid] >= d[i] - t) { ub = mid; } else { lb = mid; } } dp[i] = 1 + (i - ub); } Func.Mod ans = new Func.Mod(1); for (int i = 0; i < n; i++) { ans *= new Func.Mod(dp[i]); } Console.WriteLine(ans.n); }
/// <summary> /// メイン処理をここに書く /// </summary> void SolveOne() { int n = sc.nextInt(); if (n > 8) { return; } int[] x = sc.nextInt(n); int startRenzoku = 0; for (int i = 0; i < n; i++) { if (x[i] == i + 1) { startRenzoku++; } else { break; } } Func.Mod ans = new Func.Mod(1); for (int i = 1; i <= n; i++) { ans *= new Func.Mod(i); if (i < startRenzoku && i > 2) { ans /= new Func.Mod(2); } } Console.WriteLine(ans.n); }
/// <summary> /// メイン処理をここに書く /// </summary> void SolveOne() { int n = sc.nextInt(); int m = sc.nextInt(); int k = sc.nextInt(); Func.Mod ans = new Func.Mod(0); for (int i = 0; i <= k; i++) { int u = n + i; int d = i; int r = m + k - i; int l = k - i; Func.Mod ud = Func.comb(u + d, d); if (d > 0) { ud -= Func.comb(u + d, d - 1); } Func.Mod rl = Func.comb(r + l, l); if (l > 0) { rl -= Func.comb(r + l, l - 1); } Func.Mod tmp = Func.comb(u + d + r + l, u + d) * ud * rl; ans += tmp; } Console.WriteLine(ans.n); }
static void init() { modFact_Initialized = true; fact[0] = new Mod(1); factinv[0] = new Mod(1); for (int i = 0; i < MAX_N - 1; i++) { fact[i + 1] = fact[i] * new Mod(i + 1); factinv[i + 1] = factinv[i] / new Mod(i + 1); } }
public static Mod operator ^(Mod a, int n) { if (n == 0) { return(new Mod(1)); } Mod res = (a * a) ^ (n / 2); if (n % 2 == 1) { res = res * a; } return(res); }
/// <summary> /// メイン処理をここに書く /// </summary> void SolveOne() { int n = sc.nextInt(); int m = sc.nextInt(); long[] x = sc.nextLong(n); long[] y = sc.nextLong(m); Mod xSum = new Mod(0); Mod ySum = new Mod(0); for (int i = 0; i < n - 1; i++) { Mod tmp = new Mod((x[i + 1] - x[i]) * (i + 1) * (n - 1 - i)); xSum += tmp; } for (int i = 0; i < m - 1; i++) { Mod tmp = new Mod((y[i + 1] - y[i]) * (i + 1) * (m - 1 - i)); ySum += tmp; } Console.WriteLine((xSum * ySum).n); }