Editorial for SPECPAIR - Số đặc biệt
Remember to use this editorial only when stuck, and not to copy-paste code from it. Please be respectful to the problem author and editorialist.
Submitting an official solution before solving the problem yourself is a bannable offence.
Submitting an official solution before solving the problem yourself is a bannable offence.
Tóm tắt đề bài
Cho một dãy số nguyên dương ~a_1~, ~a_2~,..., ~a_n~. Đếm số cặp chỉ số ~(i,j)~ sao cho ~a_i~ + ~a_j~ là một số đặc biệt (số mà các chữ số đều giống nhau).
Lời giải
Trước hết, ta nhận xét rằng số lượng số đặc biệt không lớn (có tổng cộng 55 số đặc biệt có giá trị không vượt quá 2 × ~10^6~). Từ nhận xét trên, ta có thể giải bài toán như sau:
Khởi tạo mảng ~cnt~ với toàn bộ phần tử bằng 0 (~cnt[x]~ có ý nghĩa là số phần tử có giá trị bằng ~x~). Duyệt qua các phần tử của mảng ~a~. Với mỗi phần tử ~a_i~:
- Duyệt qua từng số đặc biệt ~x~, cộng thêm giá trị ~cnt[x − a_i]~ vào đáp án.
- Tăng giá trị ~cnt[a_i]~ thêm 1.
Độ phức tạp: ~O(N)~ với ~N~ là số phần tử của dãy.
Comments