Esempio n. 1
0
        /// <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);
        }
Esempio n. 2
0
        /// <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);
        }
Esempio n. 3
0
        /// <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);
        }
Esempio n. 4
0
 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);
     }
 }
Esempio n. 5
0
        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);
        }
Esempio n. 6
0
        /// <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);
        }