コード例 #1
0
ファイル: QuestionA.cs プロジェクト: terry-u16/AtCoder
        public override IEnumerable <object> Solve(TextReader inputStream)
        {
            Modular.InitializeCombinationTable();
            var n = inputStream.ReadInt();
            var k = inputStream.ReadInt();

            yield return(Modular.CombinationWithRepetition(n, k).Value);
        }
コード例 #2
0
        public override IEnumerable <object> Solve(TextReader inputStream)
        {
            var(children, candies) = inputStream.ReadValue <int, int>();
            Modular.InitializeCombinationTable();

            if (children > candies)
            {
                yield return(Modular.CombinationWithRepetition(children, candies));
            }
            else
            {
                var less         = candies / children;
                var moreChildren = candies - less * children;
                yield return(Modular.Combination(children, moreChildren));
            }
        }
コード例 #3
0
ファイル: QuestionF.cs プロジェクト: terry-u16/AtCoder
        public override IEnumerable <object> Solve(TextReader inputStream)
        {
            var k = inputStream.ReadInt();
            var s = inputStream.ReadLine();

            var sum = Modular.Zero;

            Modular.InitializeCombinationTable(2500000);

            for (int taken = 0; taken <= k; taken++)
            {
                sum += Modular.CombinationWithRepetition(taken + 1, s.Length - 1) * Modular.Pow(25, taken) * Modular.Pow(26, k - taken);
            }

            yield return(sum.Value);
        }
コード例 #4
0
        public override IEnumerable <object> Solve(TextReader inputStream)
        {
            var nk = inputStream.ReadIntArray();
            var n  = nk[0];
            var k  = nk[1];

            Modular total        = new Modular(0);
            var     maxMoveCount = Math.Min(n - 1, k);

            for (int i = 0; i <= maxMoveCount; i++)
            {
                total += Modular.Combination(n, i) * Modular.CombinationWithRepetition(n - i, i);
            }

            yield return(total.Value);
        }
コード例 #5
0
        public override IEnumerable <object> Solve(TextReader inputStream)
        {
            Modular.InitializeCombinationTable();
            var s      = inputStream.ReadInt();
            var result = Modular.Zero;

            for (int l = 1; l <= s / 3; l++)
            {
                var remain = s - l * 3;
                if (remain >= 0)
                {
                    result += Modular.CombinationWithRepetition(l, remain);
                }
            }

            yield return(result);
        }
コード例 #6
0
ファイル: QuestionF.cs プロジェクト: terry-u16/AtCoder
        public override IEnumerable <object> Solve(TextReader inputStream)
        {
            var nm     = inputStream.ReadIntArray();
            var length = nm[0];
            var m      = nm[1];

            var primeFactors = PrimeFactorize(m).GroupBy(p => p);

            var count = new Modular(1);

            foreach (var group in primeFactors)
            {
                count *= Modular.CombinationWithRepetition(length, group.Count());
            }

            yield return(count.Value);
        }
コード例 #7
0
ファイル: QuestionD.cs プロジェクト: terry-u16/AtCoder
        public override IEnumerable <object> Solve(TextReader inputStream)
        {
            var nk         = inputStream.ReadIntArray();
            var totalBalls = nk[0];
            var blueBalls  = nk[1];
            var redBalls   = totalBalls - blueBalls;

            for (int blueGroup = 1; blueGroup <= blueBalls; blueGroup++)
            {
                if (blueGroup <= redBalls + 1)
                {
                    var combination = blueBalls != 1 ? Modular.CombinationWithRepetition(blueGroup, blueBalls - blueGroup) : new Modular(1);
                    combination *= Modular.CombinationWithRepetition(blueGroup + 1, redBalls - (blueGroup - 1));
                    yield return(combination.Value);
                }
                else
                {
                    yield return(0);
                }
            }
        }
コード例 #8
0
ファイル: QuestionB.cs プロジェクト: terry-u16/AtCoder
        public override IEnumerable <object> Solve(TextReader inputStream)
        {
            Modular.InitializeCombinationTable();
            var(n, m) = inputStream.ReadValue <int, int>();
            var primes = PrimeFactorize(Math.Abs(n)).GroupBy(i => i).Select(g => (g.Key, g.Count()));

            var count = Modular.One;

            foreach (var(_, c) in primes)
            {
                count *= Modular.CombinationWithRepetition(m, c);
            }

            var minusCombination = Modular.Zero;

            for (int i = (-Math.Sign(n) + 1) / 2; i <= m; i += 2)
            {
                minusCombination += Modular.Combination(m, i);
            }

            count *= minusCombination;

            yield return(count.Value);
        }