public static Modular Pow(Modular a, int n) { switch (n) { case 0: return(1); case 1: return(a); default: var p = Pow(a, n / 2); return(p * p * Pow(a, n % 2)); } }
public void Solve() { Array.Sort(A); Modular ans = new Modular(0); var Ncr = Modular.Ncr((int)N, (int)K); // 隣り合う2つの数のうち、右側をiとする for (int i = 1; i < N; i++) { long width = A[i] - A[i - 1]; // 全体から左側のみ、右側のみを引く var Left = Modular.Ncr(i, (int)K); var Right = Modular.Ncr((int)N - i, (int)K); var p = Ncr - Left - Right; ans = ans + p * width; } Console.WriteLine((int)ans); }