12.22(18)

D - Christmas Trees

#include <iostream>
#include <cmath>
using namespace std;

int main()
{
    long long A, M, L, R;
    cin >> A >> M >> L >> R;

    if (M == 0) {
        if (L <= A && R >= A) {
            cout << 1 << endl;
        }
        else {
            cout << 0 << endl;
        }
        return 0;
    }

    long long k_min = (L - A) / M;
    if (A + k_min * M < L)k_min++;
    long long k_max = (R - A) / M;
    if (A + k_max * M > R)k_max--;

    if (k_min <= k_max) {
        cout << k_max - k_min + 1 << endl;
    }
    else {
        cout << 0 << endl;
    }

    return 0;
}

E - Repunit Trio

#include <iostream>
#include <set>
#include <vector>
#include <algorithm>

using namespace std;

long long generate(int n)
{
    long long repunit = 0;
    for (int i = 0; i < n; i++) {
        repunit = repunit * 10 + 1;
    }
    return repunit;
}

int main() 
{
    int n;
    cin >> n;
    set<long long>sums;

    vector<long long>repunits;
    for (int i = 1; i <= 12; i++) {
        repunits.push_back(generate(i));
    }

    for (int i = 0; i < repunits.size(); i++) {
        for (int j = i; j < repunits.size(); j++) {
            for (int k = j; k < repunits.size(); k++) {
                long long sum = repunits[i] + repunits[j] + repunits[k];
                sums.insert(sum);
            }
        }
    }

    vector<long long>result(sums.begin(), sums.end());
    cout << result[n-1] << endl;


    return 0;
}