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 |
|
|
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 |