canuc80k0030·31/50

Ba Số Có Tận Cùng Bằng 3

Nộp bài trên LQDOJ

Bài 0.1 · Brute Force

Cho một mảng số nguyên dương. Bạn cần chọn đúng ba phần tử ở ba vị trí khác nhau. Một lựa chọn được chấp nhận khi chữ số hàng đơn vị của tổng ba phần tử bằng . Hãy quyết định xem có ít nhất một lựa chọn như vậy hay không cho từng test.

Input

  • Dòng đầu chứa số nguyên . Với mỗi test: dòng đầu chứa ; dòng tiếp theo chứa số nguyên .

Output

  • In YES hoặc NO trên một dòng cho mỗi test. Có thể in các chữ cái ở bất kỳ kiểu hoa thường nào.

Constraints

  • .
  • cho mỗi test.
  • .
  • Tổng của tất cả test không vượt quá .

Scoring

  • Subtask ( số điểm): , tổng , và .
  • Subtask ( số điểm): Không có giới hạn bổ sung.

Example

Test 1

Input

3
5
10 21 32 44 55
4
10 20 40 80
3
1 1 1

Output

YES
NO
YES

Giải thích: Ở test đầu, nên trả lời YES. Test thứ hai chỉ có các số tận cùng bằng , còn test cuối có .

Lời giải tóm tắt
  • Ý tưởng: Chỉ chữ số hàng đơn vị ảnh hưởng đến điều kiện. Với mỗi phần dư modulo 10, giữ nhiều nhất ba đại diện; một bộ ba không thể dùng quá ba phần tử cùng phần dư. Danh sách sau khi rút gọn có nhiều nhất 30 phần tử. Duyệt mọi bộ ba chỉ số trong danh sách này và kiểm tra tổng modulo 10.
  • Chứng minh tính đúng đắn: Xét một nghiệm bất kỳ trong mảng gốc. Trong mỗi lớp phần dư, nghiệm dùng nhiều nhất ba vị trí. Nếu một vị trí của nghiệm đã bị bỏ khi rút gọn, ta có thể thay nó bằng một đại diện chưa dùng cùng lớp phần dư; tổng modulo 10 không đổi và ba vị trí vẫn khác nhau. Vì vậy việc giữ ba đại diện mỗi lớp bảo toàn sự tồn tại nghiệm. Ba vòng lặp xét toàn bộ bộ ba của danh sách rút gọn, nên thuật toán trả lời YES khi và chỉ khi nghiệm tồn tại.
  • Độ phức tạp: O(n+30^3) thời gian cho mỗi test và O(30) bộ nhớ phụ.
  • Lỗi cài đặt thường gặp: Duyệt trực tiếp mọi bộ ba trên n phần tử.
  • Lỗi cài đặt thường gặp: Chỉ giữ một hoặc hai phần tử cho mỗi chữ số tận cùng.
  • Lỗi cài đặt thường gặp: Cho phép dùng cùng một vị trí nhiều lần.