[Buổi 9][Mảng một chiều][RDD] Bài 33: Phân nhóm trong bữa tiệc


LÀM BÀI

Points: 25
Time limit: 2.0s
Memory limit: 20M

Author:
Problem types
Allowed languages
C++

Phân nhóm trong bữa tiệc

Bối cảnh

FullHouse Dev đang tổ chức một bữa tiệc tại nhà và có N người được mời. Tất cả mọi người đã đến và họ rất háo hức muốn tạo thành các nhóm để trò chuyện.

Yêu cầu

Người thứ i muốn ở trong một nhóm có chính xác P_i người (bao gồm cả chính mình). Một người không ở trong nhóm với số lượng mong muốn sẽ cảm thấy không hài lòng. Hãy xác định xem FullHouse Dev có thể phân nhóm cho tất cả mọi người sao cho ai cũng hài lòng hay không.

Input

Dòng đầu tiên chứa một số nguyên T, số lượng test cases. Mỗi test case bao gồm nhiều dòng dữ liệu:

  • Dòng đầu tiên của mỗi test case chứa số nguyên N — số lượng người tại bữa tiệc.
  • Dòng tiếp theo chứa mảng P, trong đó P_i biểu thị kích thước nhóm mong muốn của người thứ i.

Output

Với mỗi test case, in ra "YES" nếu FullHouse Dev có thể phân nhóm cho tất cả mọi người sao cho ai cũng hài lòng. Ngược lại, in ra "NO".

Ràng buộc

  • 1 ≤ T ≤ 1000
  • 2 ≤ N ≤ 10^5
  • 2 ≤ P_iN
  • Tổng số N của tất cả các test cases không vượt quá 10^5.
Ví dụ 1

Input

4
5
2 3 2 3 3
5
5 5 5 5 5
5
3 2 2 3 2
4
4 4 4 3

Output

YES
YES
NO
NO

Giải thích ví dụ

  • Test case 1: Người 1 và 3 có thể tạo thành một nhóm (vì cả hai đều muốn nhóm có 2 người). Người 2, 4 và 5 có thể tạo thành một nhóm (vì tất cả đều muốn nhóm có 3 người). Vì vậy, có thể sắp xếp sao cho tất cả đều hài lòng.
  • Test case 2: Tất cả 5 người có thể tạo thành một nhóm (vì tất cả đều muốn nhóm có 5 người). Vì vậy, có thể sắp xếp sao cho tất cả đều hài lòng.
  • Test case 3: Không thể sắp xếp sao cho tất cả đều hài lòng.
  • Test case 4: Không thể sắp xếp sao cho tất cả đều hài lòng.

Thông tin học tập

  • Buổi: B09
  • Concepts: 1D arrays, input, traversal, aggregation
  • Giới hạn kiến thức: B01-B09
  • Time limit: 2 seconds
  • Memory limit: 20 MB
  • Point: 25

Comments

There are no comments at the moment.

Zalo