Submission #282960

# Submission time Handle Problem Language Result Execution time Memory
282960 2020-08-25T07:49:37 Z egekabas Palindrome-Free Numbers (BOI13_numbers) C++14
100 / 100
1 ms 384 KB
#include <bits/stdc++.h>
#define all(x) (x).begin(), (x).end()
#define ff first
#define ss second
#define pb push_back
#define mp make_pair
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;
typedef pair<ll, ll> pll;
typedef pair<ull, ull> pull;
typedef pair<int, int> pii;
typedef pair<ld, ld> pld;
ll dp[19];
ll calc(ll x){
    if(x == 0)
        return 1;
    if(x < 0)
        return 0;
    vector<ll> val;

    while(x > 0){
        val.pb(x%10);
        x /= 10;
    }
    reverse(all(val));
    ll addnew = 1;
    vector<vector<ll>> cur(11, vector<ll>(11)), nw(11, vector<ll>(11));
    for(ll i = 0; i < val.size(); ++i){
        if(i == 0){
            for(ll j = 1; j < val[i]; ++j)
                nw[10][j] = 1;
        }
        else{
            for(ll j = 0; j < 10; ++j)
                for(ll a = 0; a <= 10; ++a)
                    for(ll b = 0; b <= 10; ++b)
                        if(j != a && j != b)
                            nw[b][j] += cur[a][b];
            for(ll j = 0; j < val[i]; ++j)
                if(addnew && j != val[i-1] && (i < 2 || j != val[i-2]))
                    nw[val[i-1]][j] += 1;
            if(val[i] == val[i-1] || (i >= 2 && val[i] == val[i-2]))
                addnew = 0;
        }
        //for(ll a = 0; a <= 10; ++a)
        //    for(ll b = 0; b <= 10; ++b)
        //        cout << i << ' ' << a << ' ' << b << ' ' << nw[a][b] << '\n';  
        cur = nw;
        nw = vector<vector<ll>>(11, vector<ll>(11));
    }
    ll ans = dp[val.size()-1];

    for(ll a = 0; a <= 10; ++a)
        for(ll b = 0; b <= 10; ++b)
            ans += cur[a][b];
    ans += addnew;
    return ans;
}
int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    
    //freopen("in.txt", "r", stdin);
    //freopen("out.txt", "w", stdout);

    dp[0] = 1;
    dp[1] = 9;
    dp[2] = 9*9;
    for(ll i = 3; i <= 18; ++i)
        dp[i] = dp[i-1]*8;
    for(ll i = 1; i <= 18; ++i)
        dp[i] += dp[i-1];

    ll x, y;
    cin >> x >> y;
    cout << calc(y)-calc(x-1) << '\n';
}

Compilation message

numbers.cpp: In function 'll calc(ll)':
numbers.cpp:30:21: warning: comparison of integer expressions of different signedness: 'll' {aka 'long long int'} and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   30 |     for(ll i = 0; i < val.size(); ++i){
      |                   ~~^~~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 1 ms 384 KB Output is correct
2 Correct 1 ms 384 KB Output is correct
3 Correct 1 ms 384 KB Output is correct
4 Correct 0 ms 384 KB Output is correct
5 Correct 0 ms 384 KB Output is correct
6 Correct 0 ms 384 KB Output is correct
7 Correct 0 ms 384 KB Output is correct
8 Correct 1 ms 384 KB Output is correct
9 Correct 0 ms 384 KB Output is correct
10 Correct 1 ms 384 KB Output is correct
11 Correct 0 ms 384 KB Output is correct
12 Correct 0 ms 384 KB Output is correct
13 Correct 1 ms 384 KB Output is correct
14 Correct 0 ms 384 KB Output is correct
15 Correct 0 ms 384 KB Output is correct
16 Correct 0 ms 384 KB Output is correct
17 Correct 0 ms 384 KB Output is correct
18 Correct 0 ms 384 KB Output is correct
19 Correct 1 ms 384 KB Output is correct
20 Correct 0 ms 384 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 384 KB Output is correct
2 Correct 1 ms 384 KB Output is correct
3 Correct 1 ms 384 KB Output is correct
4 Correct 1 ms 384 KB Output is correct
5 Correct 0 ms 384 KB Output is correct
6 Correct 0 ms 384 KB Output is correct
7 Correct 0 ms 384 KB Output is correct
8 Correct 1 ms 384 KB Output is correct
9 Correct 1 ms 384 KB Output is correct
10 Correct 1 ms 384 KB Output is correct
11 Correct 0 ms 384 KB Output is correct
12 Correct 1 ms 384 KB Output is correct
13 Correct 1 ms 384 KB Output is correct
14 Correct 1 ms 384 KB Output is correct
15 Correct 1 ms 384 KB Output is correct
16 Correct 1 ms 384 KB Output is correct
17 Correct 1 ms 384 KB Output is correct
18 Correct 1 ms 384 KB Output is correct
19 Correct 1 ms 384 KB Output is correct
20 Correct 1 ms 384 KB Output is correct
21 Correct 1 ms 384 KB Output is correct
22 Correct 1 ms 384 KB Output is correct
23 Correct 1 ms 384 KB Output is correct
24 Correct 1 ms 384 KB Output is correct
25 Correct 1 ms 384 KB Output is correct
26 Correct 1 ms 384 KB Output is correct
27 Correct 1 ms 384 KB Output is correct
28 Correct 1 ms 384 KB Output is correct
29 Correct 1 ms 384 KB Output is correct
30 Correct 1 ms 384 KB Output is correct
31 Correct 1 ms 384 KB Output is correct
32 Correct 1 ms 384 KB Output is correct
33 Correct 1 ms 384 KB Output is correct
34 Correct 1 ms 384 KB Output is correct
35 Correct 1 ms 384 KB Output is correct
36 Correct 1 ms 384 KB Output is correct
37 Correct 1 ms 288 KB Output is correct
38 Correct 0 ms 384 KB Output is correct
39 Correct 1 ms 384 KB Output is correct
40 Correct 1 ms 384 KB Output is correct
41 Correct 1 ms 384 KB Output is correct
42 Correct 1 ms 384 KB Output is correct
43 Correct 1 ms 384 KB Output is correct
44 Correct 0 ms 384 KB Output is correct
45 Correct 1 ms 384 KB Output is correct