Пример #1
0
        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));
            }
        }
Пример #2
0
        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);
        }