THPTTD_104 - Số tam giác

Xem dạng PDF

Gửi bài giải

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

Tác giả:
Dạng bài
Ngôn ngữ cho phép
C, C#, C++, Go, Java, JavaScript, Kotlin, Pascal, Perl, PHP, 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

Hãy đọc nội quy trước khi bình luận.



  • 2
    lephuochauhungvuong  đã bình luận lúc 11, Tháng 3, 2025, 7:50
    #include<bits/stdc++.h>
    using namespace std;
    
    long long a[1000001], n;
    unordered_set<long long> triangularNumbers; // Set lưu trữ các số tam giác
    
    // Hàm tạo các số tam giác và lưu vào set
    void generateTriangularNumbers(long long maxValue) {
        long long k = 1;
        long long triangular = 0;
        while (triangular <= maxValue) {
            triangular = k * (k + 1) / 2;
            triangularNumbers.insert(triangular);
            k++;
        }
    }
    
    int main() {
        ios::sync_with_stdio(false); // Tăng tốc việc đọc/ghi dữ liệu
    
        ifstream fin("triangular.inp");
        ofstream fout("triangular.out");
    
        fin >> n;
        long long maxValue = 0;
    
        // Đọc dữ liệu và xác định giá trị lớn nhất
        for (int i = 1; i <= n; i++) {
            fin >> a[i];
            maxValue = max(maxValue, a[i]);
        }
    
        // Tạo các số tam giác đến giá trị maxValue
        generateTriangularNumbers(maxValue);
    
        // Kiểm tra mỗi số trong mảng có phải số tam giác không
        for (int i = 1; i <= n; i++) {
            if (triangularNumbers.find(a[i]) != triangularNumbers.end()) {
                fout << 1 << endl; // Nếu là số tam giác
            } else {
                fout << 0 << endl; // Nếu không phải số tam giác
            }
        }
    
        return 0;
    }
    

  • 0
    kietjumper  đã bình luận lúc 30, Tháng 10, 2024, 15:27

    Ý tưởng: Để kiểm tra một số có phải là số tam giác hay không, ta tính ~x~ = sqrt(~2n~), sau đó kiểm tra xem ~x~ * (~x~ + ~1~) có bằng ~2n~ hay không. Nếu có thì ~n~ là số tam giác và ngược lại!