結果
問題 | No.2219 Re:010 |
ユーザー |
![]() |
提出日時 | 2025-01-22 11:45:46 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
TLE
|
実行時間 | - |
コード長 | 1,298 bytes |
コンパイル時間 | 1,699 ms |
コンパイル使用メモリ | 163,004 KB |
実行使用メモリ | 22,608 KB |
最終ジャッジ日時 | 2025-01-22 11:46:37 |
合計ジャッジ時間 | 50,838 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 5 TLE * 16 |
ソースコード
#include<bits/stdc++.h> #define N 200005 #define int long long #define rep(_i, _s, _n) for (int _i = _s; _i <= _n; ++i) using namespace std; string s; int dp[5]; const int mod = 998244353; int last_ans = 0; int check(string s) { int len = s.size(); int ans = -1; rep(i, 0, len - 1) { if(s[i] == '?') { ans = i; return ans; } } return ans; } void dfs() { int tmp = check(s); if(tmp == -1) { int len = s.size(); memset(dp, 0, sizeof dp); rep(i, 0, len - 1) { dp[0] = (dp[0] + (s[i] == '0') % mod) % mod; dp[1] = (dp[1] + (s[i] == '1') * dp[0] % mod) % mod; dp[2] = (dp[2] + (s[i] == '0') * dp[1] % mod) % mod; } last_ans += dp[2] % mod; last_ans %= mod; return; } s[tmp] = '0'; dfs(); s[tmp] = '1'; dfs(); s[tmp] = '?'; } signed main() { ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); cin >> s; int len = s.size(); int _cnt = 0; rep(i, 0, len - 1) { if(s[i] == '?') { ++_cnt; } } if(!_cnt) { rep(i, 0, len - 1) { dp[0] = (dp[0] + (s[i] == '0') % mod) % mod; dp[1] = (dp[1] + (s[i] == '1') * dp[0] % mod) % mod; dp[2] = (dp[2] + (s[i] == '0') * dp[1] % mod) % mod; } int ans = dp[2] % mod; cout << ans << '\n'; return 0; } dfs(); last_ans %= mod; cout << last_ans << '\n'; return 0; }