14届国赛

1 子 2023

#define int long long
void solve() {
    string s = "";
    for (int i = 1;i <= 2023;i++) {
        string ss = to_string(i);
        s += ss;
    }
    int n = s.size();s = ' ' + s;
    vector<int> pre2(n + 1), pre23(n + 10), suf3(n + 5);
    for (int i = 1;i <= n;i++)pre2[i] = pre2[i - 1] + (s[i] == '2');
    for (int i = n;i >= 1;i--)suf3[i] = suf3[i + 1] + (s[i] == '3');
    for (int i = n - 1;i >= 1;i--) {
        for (int j = i + 1;j <= n;j++) {
            if (s[i] == '2') {
                pre23[i] = pre23[i + 1] + suf3[i + 1];
            } else {
                pre23[i] = pre23[i + 1];
            }
        }
    }
    int cnt = 0;
    for (int i = 1;i <= n;i++) {
        if (s[i] == '0') {
            cnt += pre2[i] * pre23[i];
        }
    }
    cout << cnt << '\n';
}

2 双子数

void solve() {
    sieve(3e6);
    set<int>s;
    for (auto x : primes) {
        for (auto y : primes) {
            if (x != y) {
                int z = x * x + y * y;
                if (z >= 2333 && z <= 23333333333333)s.insert(z);
            }
        }
    }
    cout << s.size();
}