Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
33717 Aquizahv 【S】T1 C++ 通过 100 44 MS 12956 KB 935 2024-10-20 14:50:53

Tests(10/10):


#include <bits/stdc++.h> using namespace std; const int N = 1e6 + 5, MOD = 998244353; int n, sum[N], t[N], pows[N], ans; // i 个位,0的 2^(出现次数) 之和 char s[N]; inline int madd(int x, int y) { return x + y > MOD ? x + y - MOD : x + y; } inline int mmul(int x, int y) { return 1ll * x * y % MOD; } int main() { scanf("%s", s + 1); n = strlen(s + 1); if (n == 1 && s[1] == '0') { puts("1"); return 0; } reverse(s + 1, s + n + 1); for (int i = n; i >= 1; i--) sum[i] = sum[i + 1] + (s[i] == '0'); t[0] = pows[0] = 1; for (int i = 1; i <= n; i++) { t[i] = madd(t[i - 1], madd(t[i - 1], t[i - 1])); // 1, 0 pows[i] = madd(pows[i - 1], pows[i - 1]); } ans = pows[sum[1]]; for (int i = 1; i < n; i++) { if (s[i] == '0') continue; ans = madd(ans, mmul(pows[sum[i] + 1], t[i - 1])); } ans = madd(madd(ans, ans), t[n - 1]); cout << ans << endl; return 0; }


测评信息: