Hướng dẫn giải của [Beginner Free Contest 18] MARBLES


Chỉ dùng lời giải này khi không có ý tưởng, và đừng copy-paste code từ lời giải này. Hãy tôn trọng người ra đề và người viết lời giải.
Nộp một lời giải chính thức trước khi tự giải là một hành động có thể bị ban.

Hướng dẫn giải

Có N viên bi, cần xếp thành các hàng sao cho hàng thứ i có đúng i viên. Kiểm tra xem có xếp hết được N viên hay không (N ≤ 10^6).

Sub 1: Cộng dồn các hàng — ~O(√N)~

Hàng 1, 2, 3, … lần lượt có 1, 2, 3, … viên. Cộng dồn 1 + 2 + … + k cho đến khi tổng đạt tối thiểu N. Nếu tổng đúng bằng N thì xếp được (Yes.), ngược lại không (No.). Số lượng hàng chỉ khoảng √(2N) nên rất nhanh.

Kết quả chấm: 10/10 (PASS 10/10)

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

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    long long N;
    cin >> N;
    // Hang thu i co i vien: tong 1 + 2 + ... + k = k(k+1)/2 phai bang N
    long long tong = 0, k = 0;
    while (tong < N) {
        k++;
        tong += k;
    }
    cout << (tong == N ? "Yes." : "No.") << "\n";
    return 0;
}

Bình luận

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


Không có bình luận tại thời điểm này.