提出 #71169648


ソースコード 拡げる

#include <bits/stdc++.h>

typedef long long valueType;
typedef std::vector<valueType> ValueVector;
typedef std::vector<ValueVector> ValueMatrix;
typedef std::vector<ValueMatrix> ValueCube;
typedef std::string string;
typedef std::vector<string> StringVector;
typedef std::vector<bool> bitset;
typedef std::vector<bitset> BitMatrix;
typedef std::pair<valueType, valueType> ValuePair;
typedef std::vector<ValuePair> PairVector;
typedef std::vector<PairVector> PairMatrix;
typedef std::tuple<valueType, valueType, valueType> ValueTuple;
typedef std::vector<ValueTuple> TupleVector;
typedef std::vector<TupleVector> TupleMatrix;
typedef std::set<valueType> ValueSet;

namespace MODINT_WITH_FIXED_MOD {
    constexpr valueType MOD = 998244353;

    template<typename T1, typename T2, typename T3 = valueType>
    void Inc(T1 &a, T2 b, const T3 &mod = MOD) {
        a = a + b;

        if (a >= mod)
            a -= mod;
    }

    template<typename T1, typename T2, typename T3 = valueType>
    void Dec(T1 &a, T2 b, const T3 &mod = MOD) {
        a = a - b;

        if (a < 0)
            a += mod;
    }

    template<typename T1, typename T2, typename T3 = valueType>
    T1 sum(T1 a, T2 b, const T3 &mod = MOD) {
        return a + b >= mod ? a + b - mod : a + b;
    }

    template<typename T1, typename T2, typename T3 = valueType>
    T1 sub(T1 a, T2 b, const T3 &mod = MOD) {
        return a - b < 0 ? a - b + mod : a - b;
    }

    template<typename T1, typename T2, typename T3 = valueType>
    T1 mul(T1 a, T2 b, const T3 &mod = MOD) {
        return (long long) a * b % mod;
    }

    template<typename T1, typename T2, typename T3 = valueType>
    void Mul(T1 &a, T2 b, const T3 &mod = MOD) {
        a = (long long) a * b % mod;
    }

    template<typename T1, typename T2, typename T3 = valueType>
    T1 Pow(T1 a, T2 b, const T3 &mod = MOD) {
        T1 result = 1;

        while (b > 0) {
            if (b & 1)
                Mul(result, a, mod);

            Mul(a, a, mod);
            b = b >> 1;
        }

        return result;
    }
} // namespace MODINT_WITH_FIXED_MOD

using namespace MODINT_WITH_FIXED_MOD;

int main() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);
    std::cout.tie(nullptr);

    string S;

    std::cin >> S;

    valueType const N = S.size();

    ValueVector Prefix(10), Suffix(10);

    for (valueType i = 1; i < N; ++i)
        ++Suffix[S[i] - '0'];

    ValueVector Fact(2 * N + 1, 1), InvFact(2 * N + 1, 1);
    for (valueType i = 1; i <= 2 * N; ++i)
        Fact[i] = mul(Fact[i - 1], i);

    InvFact[2 * N] = Pow(Fact[2 * N], MOD - 2);
    for (valueType i = 2 * N - 1; i >= 0; --i)
        InvFact[i] = mul(InvFact[i + 1], i + 1);

    auto C = [&](valueType const &n, valueType const &m) -> valueType {
        if (n < m || m < 0)
            return 0;

        return mul(Fact[n], mul(InvFact[m], InvFact[n - m]));
    };

    valueType Ans = 0;

    for (valueType i = 0; i + 1 < N; ++i) {
        ++Prefix[S[i] - '0'];

        valueType const ch = S[i] - '0';

        if (ch < 9 && Prefix[ch] != 0 && Suffix[ch + 1] != 0) {
            valueType const n = Prefix[ch];
            valueType const m = Suffix[ch + 1];

            Inc(Ans, C(n + m - 1, n));
        }

        --Suffix[S[i + 1] - '0'];
    }

    std::cout << Ans << std::endl;

    return 0;
}

提出情報

提出日時
問題 F - 1122 Subsequence 2
ユーザ UserUnauthorized
言語 C++23 (Clang 21.1.0)
得点 500
コード長 3474 Byte
結果 AC
実行時間 51 ms
メモリ 35252 KiB

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 500 / 500
結果
AC × 3
AC × 27
セット名 テストケース
Sample 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt
All 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt, 01_random_00.txt, 01_random_01.txt, 01_random_02.txt, 01_random_03.txt, 01_random_04.txt, 01_random_05.txt, 01_random_06.txt, 01_random_07.txt, 01_random_08.txt, 01_random_09.txt, 01_random_10.txt, 01_random_11.txt, 01_random_12.txt, 01_random_13.txt, 01_random_14.txt, 01_random_15.txt, 01_random_16.txt, 01_random_17.txt, 01_random_18.txt, 01_random_19.txt, 01_random_20.txt, 01_random_21.txt, 01_random_22.txt, 01_random_23.txt
ケース名 結果 実行時間 メモリ
00_sample_00.txt AC 2 ms 2940 KiB
00_sample_01.txt AC 1 ms 2860 KiB
00_sample_02.txt AC 1 ms 2832 KiB
01_random_00.txt AC 1 ms 2836 KiB
01_random_01.txt AC 51 ms 35028 KiB
01_random_02.txt AC 50 ms 35080 KiB
01_random_03.txt AC 49 ms 35052 KiB
01_random_04.txt AC 49 ms 34968 KiB
01_random_05.txt AC 49 ms 35040 KiB
01_random_06.txt AC 50 ms 35096 KiB
01_random_07.txt AC 49 ms 35096 KiB
01_random_08.txt AC 24 ms 18496 KiB
01_random_09.txt AC 49 ms 35040 KiB
01_random_10.txt AC 21 ms 16320 KiB
01_random_11.txt AC 50 ms 35092 KiB
01_random_12.txt AC 2 ms 3220 KiB
01_random_13.txt AC 49 ms 35124 KiB
01_random_14.txt AC 7 ms 6788 KiB
01_random_15.txt AC 49 ms 35168 KiB
01_random_16.txt AC 11 ms 9672 KiB
01_random_17.txt AC 50 ms 35232 KiB
01_random_18.txt AC 50 ms 34992 KiB
01_random_19.txt AC 49 ms 35020 KiB
01_random_20.txt AC 49 ms 35028 KiB
01_random_21.txt AC 46 ms 35252 KiB
01_random_22.txt AC 7 ms 6976 KiB
01_random_23.txt AC 7 ms 6976 KiB