Heng_Xin 题解分享 · 2024/5/7
子 2023(结果填空) - 题解
模拟, 先得出对应的字符串s=1234...2023, 然后就是朴素的使用4个指针寻找'2' '0' '2' '3', 显然这个是 $O(n^4)$ 的时间复杂度, 对于 s.szie = 6895, 你需要计算 约 $10^{15}$ 次, 显然比赛已经结束了awa... 所以你可以先使用一个哈希表, 记录最后一位(即 对于从字符串索引为i之后, 还出现多少次 2023 の 3) 这样时间复杂度就变成了 $O(n^3)$ 了, 几秒就AC了 =-= 代码奉上: ❤️ ```cpp #include <iostream> #include <string> #include <vector> #include <unordered_map> using namespace std; int main() { string s; for (int i = 1; i <= 2023; ++i) s += to_string(i); // cout << s.size() << '\n'; long long res = 0; unordered_map<int, int> hash; for (int i = s.size() - 1, cnt = 0; i >= 0; --i) { if (s[i] == '3') ++cnt; hash[i] = cnt; } // o(n^4) = 2.34389254465e+15 / e+9 = e+6 = for (int a = 0; a < s.size(); ++a) if (s[a] == '2') for (int b = a + 1; b < s.size(); ++b) if (s[b] == '0') for (int c = b + 1; c < s.size(); ++c) if (s[c] == '2') res += hash[c]; cout << res; return 0; } ```
查看全文
2 0 0 2