Submission #58980

# Submission time Handle Problem Language Result Execution time Memory
58980 2018-07-20T00:36:40 Z Benq Palindrome-Free Numbers (BOI13_numbers) C++14
100 / 100
4 ms 756 KB
#include <bits/stdc++.h>
#include <ext/pb_ds/tree_policy.hpp>
#include <ext/pb_ds/assoc_container.hpp>

using namespace std;
using namespace __gnu_pbds;
 
typedef long long ll;
typedef long double ld;
typedef complex<ld> cd;

typedef pair<int, int> pi;
typedef pair<ll,ll> pl;
typedef pair<ld,ld> pd;

typedef vector<int> vi;
typedef vector<ld> vd;
typedef vector<ll> vl;
typedef vector<pi> vpi;
typedef vector<pl> vpl;
typedef vector<cd> vcd;

template <class T> using Tree = tree<T, null_type, less<T>, rb_tree_tag,tree_order_statistics_node_update>;

#define FOR(i, a, b) for (int i=a; i<(b); i++)
#define F0R(i, a) for (int i=0; i<(a); i++)
#define FORd(i,a,b) for (int i = (b)-1; i >= a; i--)
#define F0Rd(i,a) for (int i = (a)-1; i >= 0; i--)

#define sz(x) (int)(x).size()
#define mp make_pair
#define pb push_back
#define f first
#define s second
#define lb lower_bound
#define ub upper_bound
#define all(x) x.begin(), x.end()

const int MOD = 1000000007;
const ll INF = 1e18;
const int MX = 100001;

ll solve(ll z) {
    if (z == -1) return 0;
    if (z == 0) return 1;
    ll ans = 0;
    string x = to_string(z);
    F0R(i,sz(x)) {
        if (i == 0) {
            if (sz(x) == 1) ans ++;
            int left = sz(x)-i-1;
            ll mul = 1;
            if (left) mul *= 9, left --;
            while (left) mul *= 8, left --;
            ans += mul*(x[i]-'1');
        } else {
            F0R(j,x[i]-'0') {
                char c = char('0'+j);
                if (c == x[i-1] || (i > 1 && c == x[i-2])) continue;
                ll left = sz(x)-1-i;
                ll mul = 1;
                while (left) mul *= 8, left --;
                ans += mul;
            }
            if (x[i] == x[i-1] || (i > 1 && x[i] == x[i-2])) break;
        }
        if (i == sz(x)-1) ans ++;
    }
    FOR(i,1,sz(x)) {
        if (i == 1) ans += 10;
        else {
            ll lef = i-2, mul = 9*9;
            while (lef) mul *= 8, lef --;
            ans += mul;
        }
    }
    return ans;
}

int main() {
    ios_base::sync_with_stdio(0); cin.tie(0);
    ll a,b; cin >> a >> b;
    /*FOR(i,0,200) {
        cout << i << " " << solve(i)-solve(i-1) << "\n";
    }*/
    cout << solve(b)-solve(a-1);
}

/* Look for:
* the exact constraints (multiple sets are too slow for n=10^6 :( ) 
* special cases (n=1?)
* overflow (ll vs int?)
* array bounds
*/
# Verdict Execution time Memory Grader output
1 Correct 2 ms 376 KB Output is correct
2 Correct 3 ms 376 KB Output is correct
3 Correct 3 ms 436 KB Output is correct
4 Correct 3 ms 492 KB Output is correct
5 Correct 2 ms 496 KB Output is correct
6 Correct 2 ms 496 KB Output is correct
7 Correct 2 ms 568 KB Output is correct
8 Correct 2 ms 620 KB Output is correct
9 Correct 4 ms 620 KB Output is correct
10 Correct 2 ms 620 KB Output is correct
11 Correct 2 ms 620 KB Output is correct
12 Correct 2 ms 624 KB Output is correct
13 Correct 3 ms 624 KB Output is correct
14 Correct 3 ms 624 KB Output is correct
15 Correct 3 ms 624 KB Output is correct
16 Correct 3 ms 624 KB Output is correct
17 Correct 2 ms 744 KB Output is correct
18 Correct 2 ms 744 KB Output is correct
19 Correct 3 ms 744 KB Output is correct
20 Correct 3 ms 744 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 3 ms 744 KB Output is correct
2 Correct 3 ms 744 KB Output is correct
3 Correct 2 ms 744 KB Output is correct
4 Correct 2 ms 744 KB Output is correct
5 Correct 2 ms 744 KB Output is correct
6 Correct 3 ms 744 KB Output is correct
7 Correct 3 ms 744 KB Output is correct
8 Correct 2 ms 744 KB Output is correct
9 Correct 3 ms 744 KB Output is correct
10 Correct 4 ms 744 KB Output is correct
11 Correct 3 ms 744 KB Output is correct
12 Correct 2 ms 744 KB Output is correct
13 Correct 3 ms 756 KB Output is correct
14 Correct 3 ms 756 KB Output is correct
15 Correct 2 ms 756 KB Output is correct
16 Correct 3 ms 756 KB Output is correct
17 Correct 3 ms 756 KB Output is correct
18 Correct 2 ms 756 KB Output is correct
19 Correct 2 ms 756 KB Output is correct
20 Correct 3 ms 756 KB Output is correct
21 Correct 2 ms 756 KB Output is correct
22 Correct 3 ms 756 KB Output is correct
23 Correct 3 ms 756 KB Output is correct
24 Correct 2 ms 756 KB Output is correct
25 Correct 2 ms 756 KB Output is correct
26 Correct 2 ms 756 KB Output is correct
27 Correct 2 ms 756 KB Output is correct
28 Correct 2 ms 756 KB Output is correct
29 Correct 2 ms 756 KB Output is correct
30 Correct 2 ms 756 KB Output is correct
31 Correct 2 ms 756 KB Output is correct
32 Correct 2 ms 756 KB Output is correct
33 Correct 2 ms 756 KB Output is correct
34 Correct 3 ms 756 KB Output is correct
35 Correct 3 ms 756 KB Output is correct
36 Correct 2 ms 756 KB Output is correct
37 Correct 3 ms 756 KB Output is correct
38 Correct 4 ms 756 KB Output is correct
39 Correct 2 ms 756 KB Output is correct
40 Correct 2 ms 756 KB Output is correct
41 Correct 2 ms 756 KB Output is correct
42 Correct 2 ms 756 KB Output is correct
43 Correct 3 ms 756 KB Output is correct
44 Correct 3 ms 756 KB Output is correct
45 Correct 2 ms 756 KB Output is correct