Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Date / Time: 2022-06-09 10:17:13
- //Слава Україні, Героям слава 🇺🇦
- #include <bits/stdc++.h>
- using namespace std;
- const int mod = 1e9 + 7;
- long long binexp(long long a, long long n) {
- long long res = 1;
- while(n) {
- if(n & 1) {
- res = (res * a) % mod;
- }
- a = (a * a) % mod;
- n >>= 1;
- }
- return res;
- }
- int main() {
- ios_base::sync_with_stdio(false);
- cin.tie(0);
- long long a1, a2, b1, b2, k;
- cin >> a1 >> a2 >> b1 >> b2 >> k;
- vector<long long> v;
- for(int i = 1; i < (1 << 10); i++) {
- int k = i;
- long long a = 0;
- while(k) {
- if(k & 1) {
- a = (a * 10) + 3;
- } else {
- a = (a * 10) + 8;
- }
- k >>= 1;
- }
- v.push_back(a);
- k = i;
- a = 0;
- while(k) {
- if(k & 1) {
- a = (a * 10) + 8;
- } else {
- a = (a * 10) + 3;
- }
- k >>= 1;
- }
- v.push_back(a);
- }
- v.push_back(0);
- sort(v.begin(), v.end());
- long long tot = (a2 - a1 + 1);
- tot = (tot * (b2 - b1 + 1)) % mod;
- long long cur = 0;
- for(int i = 1; i < (int)v.size() - k; i++) {
- cur += (max(min(v[i], a2) - max(v[i - 1] + 1, a1) + 1, 0ll) * max(min(v[i + k] - 1, b2) - max(v[i + k - 1], b1) + 1, 0ll));
- cur += (max(min(v[i], b2) - max(v[i - 1] + 1, b1) + 1, 0ll) * max(min(v[i + k] - 1, a2) - max(v[i + k - 1], a1) + 1, 0ll));
- cur %= mod;
- }
- cout << (cur * binexp(tot, mod - 2)) % mod << "\n";
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement