Районная олимпиада 2019-2020 информатика
Задача B. Жұп сандар
Сізге $L$ және $R$ сандары беріледі. $L$-дан $R$-ға дейін барлық цифралары ондық санау жүйесінде жұп болатын сандардың санын табу керек. Есептің жауабын табыңыз.
- $1 <= L <= R <= 10^2$. 1-2 нөмердегі тесттер.
- $1 <= L <= R <= 10^6$. 3-4 нөмердегі тесттер.
- $1 <= L <= R <= 10^{10}$. 5-10 нөмердегі тесттер
3 10Ответ
3( Aibar Kuanyshbay )
Комментарий/решение:
#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;
}
#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;
}
Возможно, что при неправильном наборе формул, они будут
доредактированы модератором. При этом содержание не будет меняться.