Районная олимпиада 2019-2020 информатика


Задача B. Четные цифры

Ограничение по времени:
1 секунда
Ограничение по памяти:
256 мегабайт

Дается два целых натуральных числа $L$ и $R$. Нужно посчитать сколько существует чисел от $L$ до $R$, включительно, у которых все цифры в десятичной записи четные. Найдите ответ.
Формат входного файла
В первой строке входных данных дано два натуральных числа $L$ и $R$ $(1 <= L <= R <= 10^{10})$.
Формат выходного файла
Выведите одно целое число — ответ на задачу.
Система оценки
Данная задача содержит $10$ тестов. Каждый тест оценивается в $10$ баллов:
  1. $1 <= L <= R <= 10^2$. Тесты с номерами 1-2.
  2. $1 <= L <= R <= 10^6$. Тесты с номерами 3-4.
  3. $1 <= L <= R <= 10^{10}$. Тесты с номерами 5-10.
Пример:
Вход
3 10
Ответ
3
( Aibar Kuanyshbay )
посмотреть в олимпиаде

Комментарий/решение:

  3
2020-05-22 20:08:40.0 #

Поздно конечно, но надеюсь поможет

показать/скрыть код

  0
2020-11-09 01:18:01.0 #

показать/скрыть код

  0
2020-11-20 01:25:46.0 #

#include <bits/stdc++.h>

using namespace std;

#define ll long long

#define pb push_back

#define mp make_pair

#define fr first

#define sc second

#define all(x) x.begin(), x.end()

#define rall(x) x.rbegin(), x.rend()

#define w(x) cout<<(#x)<<" = "<<x<<endl;

const int N = 2e5 + 7;

const int M = 2e6 + 7;

const int MOD = 1e9 + 7;

const int INF = 0x3f3f3f3f;

int pos(ll x) {

int op = 1;;

while (x) {

if((x % 10) % 2) return op;

x = x / 10;

op = op * 10;

}

return -1;

}

int main() {

ll l, r, ans = 0;

cin >> l >> r;

for (l; l <= r; ++l) {

if(l % 2) continue;

ll temp = pos(l);

if(temp == -1) ++ans;

else l = l + temp - l % temp - 1;

}

cout << ans;

return 0;

}

  0
2020-11-28 10:27:13.0 #

показать/скрыть код

  0
2020-12-19 12:31:08.0 #

#include <bits/stdc++.h>

#include <fstream>

using namespace std;

ll l, r;

ll t[12];

int check(ll n) {

int cnt = 0;

while (n) {

if (n % 10 != 8)

break;

else cnt++;

n /= 10;

}

return cnt;

}

ll f(ll n) {

ll i = 2, res = 0, cnt = 0;

while (i <= n) {

res++;

cnt = check(i);

i += t[cnt];

}

return res;

}

void solve() {

cin >> l >> r;

cout << f(r) - f(l-1) << endl;

}

int main() {

ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);

cerr << setprecision(10) << fixed;

/*ofstream fout;

ifstream fin;

fin.open("input.txt");

fout.open("output.txt");*/

ll p = 12, cnt = 10;

t[0] = 2;

for (int i = 1; i <= 11; i++) {

t[i] = p;

p = cnt*10 + p;

cnt *= 10;

}

int tt = 1;

//cin >> t;

while (tt--) {

solve();

}

/*fin.close();

fout.close();*/

return 0;

}

пред. Правка 2   0
2021-04-06 08:47:33.0 #