답안 #713116

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
713116 2023-03-21T07:15:59 Z Stickfish Palindrome-Free Numbers (BOI13_numbers) C++17
100 / 100
1 ms 336 KB
#include <iostream>
#include <vector>
#include <bitset>
using namespace std;
using ll = long long;

ll pw(ll a, ll m) {
    if (!m)
        return 1;
    if (m % 2)
        return a * pw(a, m - 1);
    return pw(a * a, m / 2);
}

ll get_ans_pow10(ll k) {
    if (k == 0)
        return 0;
    if (k == 1)
        return 10;
    if (k == 2)
        return 90;
    return pw(8, k - 2) * 90;
}

ll get_ans(ll n) {
    if (n == -1)
        return 0;
    ll k = 0; 
    while (n >= pw(10, k + 1))
        ++k;
    vector<int> ds(k + 3, 11);
    //ds[k + 1] = 0;
    for (int i = k; i >= 0; --i) {
        ds[i] = n / pw(10, i) % 10;
    }
    ll ans = 0;
    for (int i = k; i >= 0; --i) {
        // d < ds[i]
        if (i < k) {
            int mul = ds[i];
            if (ds[i + 1] < ds[i])
                --mul;
            if (ds[i + 2] < ds[i])
                --mul;
            ans += pw(8, i) * mul;
        } else {
            if (i > 0)
                ans += (ds[i] - 1) * 9 * pw(8, i - 1);
            else
                ans += ds[i] - 1;
            for (int j = 0; j < i; ++j) {
                if (j > 0)
                    ans += 9 * 9 * pw(8, j - 1);
                else
                    ans += 9;
            }
            ++ans;
        }
        //cout << ans << endl;
        
        if (ds[i] == ds[i + 1] || ds[i] == ds[i + 2])
            break;
        if (i == 0)
            ++ans;
    }
    return ans;
}

signed main() {
    ll a, b;
    cin >> a >> b;
    //cout << get_ans(a - 1) << '\n';
    //cout << get_ans(b) << ' ' << get_ans(a - 1) << '\n';
    cout << get_ans(b) - get_ans(a - 1) << '\n';
}
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 0 ms 296 KB Output is correct
4 Correct 1 ms 212 KB Output is correct
5 Correct 1 ms 212 KB Output is correct
6 Correct 1 ms 212 KB Output is correct
7 Correct 1 ms 212 KB Output is correct
8 Correct 0 ms 212 KB Output is correct
9 Correct 1 ms 212 KB Output is correct
10 Correct 0 ms 212 KB Output is correct
11 Correct 1 ms 212 KB Output is correct
12 Correct 1 ms 212 KB Output is correct
13 Correct 1 ms 212 KB Output is correct
14 Correct 1 ms 212 KB Output is correct
15 Correct 1 ms 212 KB Output is correct
16 Correct 1 ms 212 KB Output is correct
17 Correct 1 ms 212 KB Output is correct
18 Correct 1 ms 212 KB Output is correct
19 Correct 1 ms 212 KB Output is correct
20 Correct 1 ms 212 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 1 ms 300 KB Output is correct
4 Correct 1 ms 212 KB Output is correct
5 Correct 1 ms 212 KB Output is correct
6 Correct 1 ms 212 KB Output is correct
7 Correct 1 ms 212 KB Output is correct
8 Correct 1 ms 212 KB Output is correct
9 Correct 1 ms 300 KB Output is correct
10 Correct 1 ms 212 KB Output is correct
11 Correct 1 ms 212 KB Output is correct
12 Correct 1 ms 212 KB Output is correct
13 Correct 1 ms 300 KB Output is correct
14 Correct 0 ms 212 KB Output is correct
15 Correct 1 ms 212 KB Output is correct
16 Correct 1 ms 212 KB Output is correct
17 Correct 1 ms 300 KB Output is correct
18 Correct 1 ms 304 KB Output is correct
19 Correct 1 ms 300 KB Output is correct
20 Correct 0 ms 212 KB Output is correct
21 Correct 1 ms 304 KB Output is correct
22 Correct 1 ms 300 KB Output is correct
23 Correct 1 ms 212 KB Output is correct
24 Correct 1 ms 296 KB Output is correct
25 Correct 1 ms 304 KB Output is correct
26 Correct 1 ms 212 KB Output is correct
27 Correct 0 ms 212 KB Output is correct
28 Correct 1 ms 212 KB Output is correct
29 Correct 1 ms 212 KB Output is correct
30 Correct 1 ms 212 KB Output is correct
31 Correct 1 ms 212 KB Output is correct
32 Correct 1 ms 212 KB Output is correct
33 Correct 0 ms 304 KB Output is correct
34 Correct 0 ms 212 KB Output is correct
35 Correct 1 ms 212 KB Output is correct
36 Correct 1 ms 212 KB Output is correct
37 Correct 1 ms 336 KB Output is correct
38 Correct 1 ms 212 KB Output is correct
39 Correct 1 ms 296 KB Output is correct
40 Correct 1 ms 212 KB Output is correct
41 Correct 1 ms 212 KB Output is correct
42 Correct 1 ms 296 KB Output is correct
43 Correct 1 ms 212 KB Output is correct
44 Correct 1 ms 212 KB Output is correct
45 Correct 1 ms 212 KB Output is correct