THPTTD_78 - Tổng giai thừa

Xem dạng PDF

Gửi bài giải


Điểm: 7,00 (OI)
Giới hạn thời gian: 1.0s
Giới hạn bộ nhớ: 256M
Input: fac.inp
Output: fac.out

Tác giả:
Dạng bài
Ngôn ngữ cho phép
C, C#, C++, Go, Java, JavaScript, Kotlin, Pascal, Perl, PHP, PyPy, Python, Ruby, Rust, Scratch, Swift

Trong trường hợp đề bài hiển thị không chính xác, bạn có thể tải đề bài tại đây: Đề bài


Bình luận

Please read the guidelines before commenting.



  • 1
    mducc  đã bình luận lúc 11, Tháng 6, 2026, 6:08

    ta để ý sẽ thấy $$20! = 10^{18}$$ hay là giới hạn của ~a_i~ và m chỉ bé hơn ~500~ nên ta hoàn toàn có thể for ~3~ vòng từ ~1~ -> ~20~ để check từng giai thừa để làm điểm điều này nhanh hơn ta xẽ xây dựng mảng ~f[21]~
    tương ứng như sau:

    ~f_i~ : ~i~ giai thừa

    ~f_1 = 1~

    ~f_i = f_{i - 1} * i~

    Code tham khảo (C++)

    #include <bits/stdc++.h>
    using namespace std;
    
    int m;
    long long f[21];
    
    int main() {
        freopen("fac.inp", "r", stdin);
        freopen("fac.out", "w", stdout);
        ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr);
        cin >> m;
        f[1] = 1;
        for(int i = 2; i <= 20; ++i) f[i] = f[i - 1] * i;
        while(m--) {
            long long x;
            cin >> x;
            bool ok = false;
            for(int i = 1; i <= 20; ++i)
                for(int j = i + 1; j <= 20; ++j)
                    for(int k = j + 1; k <= 20; ++k)
                    if(f[i] + f[j] + f[k] == x) {
                        ok = true;
                        break;
                    }
            cout << ok << '\n';
        }
        return 0;
    }
    

  • 0
    vn_sharks  đã bình luận lúc 11, Tháng 8, 2025, 10:19

    dạ cho mình xin code bài này với ạ