题解分享
题解分享简介
子 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



