Submission #69686349


Source Code Expand

/*
Original Python code (must be included at the beginning of submission):

from collections import *

N = int(input())
S = list(input().rstrip())
N2 = 1 << N
dp = [0] * N2
dp[0] = 1
mod = 998244353
value = [0] * N2
for s in range(1, N2):
    temp = ""
    for i in range(N):
        if (s >> i) & 1 == 0:
            continue
        temp += S[i]
    value[s] = temp

memo = defaultdict(int)
for s in range(1, N2):
    v = value[s]
    if v in memo:
        dp[s] = memo[v]
        continue

    SS = set()
    for i in range(N):
        if (s >> i) & 1 == 0:
            continue
        if value[s ^ (1 << i)] in SS:
            continue
        SS.add(value[s ^ (1 << i)])
        ns = s ^ (1 << i)
        dp[s] += dp[ns]
        dp[s] %= mod
    memo[v] = dp[s]

print(dp[-1])
*/

#include <bits/stdc++.h>
using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    
    int N;
    if (!(cin >> N)) return 0;
    string S;
    cin >> S; // the string of length N

    int N2 = 1 << N;
    const long long mod = 998244353LL;

    vector<long long> dp(N2, 0);
    dp[0] = 1;

    vector<string> value(N2);
    for (int s = 1; s < N2; ++s) {
        string temp;
        temp.reserve(N); // small optimization
        for (int i = 0; i < N; ++i) {
            if (((s >> i) & 1) == 0) continue;
            temp.push_back(S[i]);
        }
        value[s] = std::move(temp);
    }

    unordered_map<string, long long> memo;
    memo.reserve(N2 / 2);

    for (int s = 1; s < N2; ++s) {
        const string &v = value[s];
        auto it = memo.find(v);
        if (it != memo.end()) {
            dp[s] = it->second;
            continue;
        }

        unordered_set<string> SS;
        SS.reserve(N);
        long long sum = 0;
        for (int i = 0; i < N; ++i) {
            if (((s >> i) & 1) == 0) continue;
            const string &prev = value[s ^ (1 << i)];
            if (SS.find(prev) != SS.end()) continue;
            SS.insert(prev);
            int ns = s ^ (1 << i);
            sum += dp[ns];
            if (sum >= mod) sum -= mod * (sum / mod);
        }
        sum %= mod;
        dp[s] = sum;
        memo.emplace(v, sum);
    }

    cout << dp[N2 - 1] << '\n';
    return 0;
}

Submission Info

Submission Time
Task F - Inserting Process
User rlangevin
Language C++ 20 (gcc 12.2)
Score 0
Code Size 2348 Byte
Status TLE
Exec Time 2790 ms
Memory 507076 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 0 / 500
Status
AC × 2
TLE × 1
AC × 22
TLE × 7
Set Name Test Cases
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_test_00.txt, 01_test_01.txt, 01_test_02.txt, 01_test_03.txt, 01_test_04.txt, 01_test_05.txt, 01_test_06.txt, 01_test_07.txt, 01_test_08.txt, 01_test_09.txt, 01_test_10.txt, 01_test_11.txt, 01_test_12.txt, 01_test_13.txt, 01_test_14.txt, 01_test_15.txt, 01_test_16.txt, 01_test_17.txt, 01_test_18.txt, 01_test_19.txt, 01_test_20.txt, 01_test_21.txt, 01_test_22.txt, 01_test_23.txt, 01_test_24.txt, 01_test_25.txt
Case Name Status Exec Time Memory
00_sample_00.txt AC 1 ms 3524 KiB
00_sample_01.txt AC 1 ms 3540 KiB
00_sample_02.txt TLE 2790 ms 501968 KiB
01_test_00.txt AC 1 ms 3456 KiB
01_test_01.txt AC 1 ms 3696 KiB
01_test_02.txt AC 316 ms 192804 KiB
01_test_03.txt AC 1 ms 3400 KiB
01_test_04.txt AC 2 ms 3604 KiB
01_test_05.txt AC 591 ms 380424 KiB
01_test_06.txt AC 639 ms 382792 KiB
01_test_07.txt AC 647 ms 383032 KiB
01_test_08.txt AC 784 ms 391964 KiB
01_test_09.txt AC 1011 ms 404832 KiB
01_test_10.txt AC 1512 ms 431348 KiB
01_test_11.txt TLE 2790 ms 496400 KiB
01_test_12.txt AC 1716 ms 442440 KiB
01_test_13.txt AC 1391 ms 425552 KiB
01_test_14.txt AC 1494 ms 432020 KiB
01_test_15.txt TLE 2790 ms 501720 KiB
01_test_16.txt TLE 2790 ms 503980 KiB
01_test_17.txt TLE 2790 ms 494300 KiB
01_test_18.txt TLE 2790 ms 507076 KiB
01_test_19.txt AC 700 ms 385960 KiB
01_test_20.txt AC 1795 ms 439480 KiB
01_test_21.txt TLE 2790 ms 493052 KiB
01_test_22.txt AC 596 ms 380328 KiB
01_test_23.txt AC 596 ms 380388 KiB
01_test_24.txt AC 599 ms 380416 KiB
01_test_25.txt AC 1 ms 3516 KiB