Trang chủ Tin Học Lớp 10 Hãy trả lời Q truy vấn, mỗi truy vấn cho...

Hãy trả lời Q truy vấn, mỗi truy vấn cho bởi bộ ba số 𝐴,𝐵,𝐾 (1 𝐴 𝐵 < 1012,1 𝐾 1012). Hỏi rằng có bao nhiêu số chia hết cho số tự nhiên K trong các

Câu hỏi :

Hãy trả lời Q truy vấn, mỗi truy vấn cho bởi bộ ba số 𝐴,𝐵,𝐾 (1 𝐴 𝐵 < 1012,1 𝐾 1012). Hỏi rằng có bao nhiêu số chia hết cho số tự nhiên K trong các số tự nhiên từ A đến B. Input: - Dòng đầu ghi số Q (1 𝑄 106). - Q dòng tiếp theo, mỗi dòng ghi 3 số thể hiện Q truy vấn Output: - Ghi ra Q dòng là đáp số cho Q truy vấn tương ứng Example: Input Ouput Giải thích 1 1 6 2 3 Có 3 số chia hết cho 2 là 2, 4, 6 2 3 8 4 3 99 3 2 33 Subtask 1: 30% test có 𝑄 = 1, 1 𝐴,𝐵,𝐾 106; Subtask 2: 30% test có 𝑄 100,103 𝐴,𝐵,𝐾 106; Subtask 3: 40% test còn lại không có thêm giới hạn gì. (C++)

Lời giải 1 :

Ý tưởng:

Nhận thấy giới hạn của `a` và `b` rất lớn nên không thể sử dụng cách thông thường sẽ bị $TLE$, thay vào đó chúng ta sẽ sử dụng Toán

$+)$ Ta cần tìm số đầu tiên $\geqslant a$ chia hết cho $k$ (số đầu tiên của dãy số)

Công thức tìm số đó là $\Bigl\lfloor\dfrac{a + k - 1}{k}\Bigr\rfloor \times k$ 

$+)$ Ta cần tìm số đầu tiên $\leqslant b$ chia hết cho $k$ (số cuối cùng của dãy số)

Có thể thấy ví dụ như tìm số đầu tiên $\vdots \ \ 3$ mà $\leqslant 10$

Thì $10 \mod 3 = 1$, $10 - 1 = 9$ là số đầu tiên

Vậy ta có công thức tổng quát cho bài này như sau

Gọi $x$ là số đầu tiên, $x = \Bigl\lfloor\dfrac{a + k - 1}{k}\Bigr\rfloor \times k$

Gọi $y$ là số cuối cùng, $y = b - b \mod k$

$\Longrightarrow $ Số lượng số chia hết cho `k` trong đoạn từ `a -> b` là $\dfrac{y - x}k + 1$

Code:

#include <bits/stdc++.h>
using namespace std;

#define ll long long

int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);

    int q; cin >> q;

    while (q--) {
        ll a, b, k; cin >> a >> b >> k;
        ll first = (a + k - 1) / k * k;
        ll last = b - b % k;

        cout << (last - first) / k + 1 << "\n";
    }

    return 0;
}

Bạn có biết?

Tin học là một ngành khoa học chuyên nghiên cứu quá trình tự động hóa việc tổ chức, lưu trữ, xử lý và truyền dẫn thông tin của một hệ thống máy tính cụ thể hoặc trừu tượng. Tin học bao hàm tất cả các nghiên cứu và kỹ thuật có liên quan đến việc mô phỏng, biến đổi và tái tạo thông tin. Hãy tận dụng sức mạnh của tin học để giải quyết các vấn đề và sáng tạo ra những giải pháp mới!

Nguồn :

Wikipedia - Bách khoa toàn thư

Tâm sự lớp 10

Lớp 10 - Năm đầu tiên ở cấp trung học phổ thông, chúng ta sẽ có nhiều bạn bè mới đến từ những nơi khác nhau. Ngôi trường mới, xa nhà hơn, mở ra một thế giới mới với nhiều điều thú vị. Hãy mở lòng đón nhận và tận hưởng những trải nghiệm mới!

Nguồn :

sưu tập

Liên hệ hợp tác hoặc quảng cáo: gmail

Điều khoản dịch vụ

Copyright © 2021 HOCTAPSGK