제출 #413064

#제출 시각아이디문제언어결과실행 시간메모리
413064CodeChamp_SSPalindrome-Free Numbers (BOI13_numbers)C++17
96.25 / 100
2 ms360 KiB
#include<bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> using namespace __gnu_pbds; using namespace std; #define ff first #define ss second #define pb push_back #define eb emplace_back #define mp make_pair #define lb lower_bound #define ub upper_bound #define setbits(x) __builtin_popcountll(x) #define zrobits(x) __builtin_ctzll(x) #define sz(v) (int)v.size() #define ps(y) cout << fixed << setprecision(y) #define ms(arr, v) memset(arr, v, sizeof(arr)) #define all(v) v.begin(), v.end() #define rall(v) v.rbegin(), v.rend() #define trav(x, v) for(auto &x: v) #define w(t) int t; cin >> t; while(t--) #define rep0(i, n) for(int i = 0; i < n; i++) #define rrep0(i, n) for(int i = n - 1; i >= 0; i--) #define rep1(i, n) for(int i = 1; i <= n; i++) #define rrep1(i, n) for(int i = n; i > 0; i--) #define inp(arr, n) rep0(i, n) cin >> arr[i]; #define rep(i, a, b) for(int i = a; i <= b; i++) #define rrep(i, a, b) for(int i = a; i >= b; i--) typedef long long ll; typedef unsigned long long ull; typedef long double ld; typedef pair<ll, ll> pii; typedef vector<ll> vi; typedef vector<vi> vvi; typedef vector<pii> vp; typedef vector<bool> vb; typedef vector<string> vs; typedef map<ll, ll> mii; typedef map<char, ll> mci; typedef priority_queue<ll> pq_mx; typedef priority_queue<ll, vi, greater<>> pq_mn; typedef tree<ll, null_type, less<>, rb_tree_tag, tree_order_statistics_node_update> pbds; /* * find_by_order(i) -> returns an iterator to the element at ith position (0 based) * order_of_key(i) -> returns the position of element i (0 based) */ const int N = 2e5 + 5; const int mod = 1e9 + 7; //const int mod = 998244353; const ll inf = 1e18; mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); void fio() { ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0); } string a, b; ll dp[20][11][11][2]; ll f(int i, int b1, int b2, int eq, string &k) { if (i == sz(k)) return 1; if (dp[i][b1][b2][eq] != -1) return dp[i][b1][b2][eq]; ll ans = 0; int j = eq ? ((k[i] - '0') + 1) : 10; rep0(x, j) { if (x == b1 or x == b2) continue; bool neq = eq & (x == k[i] - '0'); bool leading0 = ((b2 == 10) & (x == 0)); ans += f(i + 1, b2, leading0 ? 10 : x, neq, k); } return dp[i][b1][b2][eq] = ans; } int main() { fio(); ll i, j; cin >> i >> j; if (i) --i; if (i == 0) a = "0"; else { while (i) a += ((i % 10) + '0'), i /= 10; } if (j == 0) b = "0"; else { while (j) b += ((j % 10) + '0'), j /= 10; } reverse(all(a)), reverse(all(b)); // cout << a << " " << b << endl; ms(dp, -1); ll r1 = f(0, 10, 10, 1, b); ms(dp, -1); ll r2 = f(0, 10, 10, 1, a); cout << r1 - r2; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...