Điều hướng chính

Ngôn ngữ

Phím tắt

/
Chuyển đến ô tìm bài
g p
Đi đến bài tập
g c
Đi đến kỳ thi
g u
Đi đến người dùng
?
Mở trợ giúp phím tắt

Bài tập

Bài được chọn theo nhịp luyện tập của bạn, cùng mọi bài mới vừa lên.

root

Cây phả hệ

100 điểm

Trong Học viện mật mã, các nhà nghiên cứu đang làm việc với cấu trúc dữ liệu dạng cây phả hệ để bảo vệ thông tin. Cây phả hệ này có \(N\) nút, được đánh số từ \(1\) đến \(N\), với nút \(1\) là nút gốc.

Một nhà nghiên cứu trẻ tên là Kaito được giao nhiệm vụ phân tích một loại hoán vị "Tốt" trên cây.

Một hoán vị \(p_1, p_2, \dots, p_n\) được gọi là Tốt khi và chỉ khi, với mỗi vị trí \(i\) (\(1 \le i \le n\)), ít nhất một trong các điều kiện sau được thỏa mãn:

  • Vị trí cố định: \(p_i = i\).
  • Quan hệ Tổ Tiên: Nút \(p_i\) là tổ tiên của nút \(i\).
  • Quan hệ Hậu Duệ: Nút \(p_i\) là hậu duệ của nút \(i\).

Bạn được yêu cầu giúp Kaito đếm số lượng hoán vị Tốt có độ dài \(N\) cho cây phả hệ đã cho, và in ra kết quả sau khi lấy modulo \(998\,244\,353\).

Input

  • Dòng đầu tiên chứa số nguyên \(T\) (\(1 \le T \le 5\)) --- số lượng bộ dữ liệu thử nghiệm.
  • Đối với mỗi bộ dữ liệu:

  • Dòng đầu chứa số nguyên \(N\) (\(2 \le N \le 5\,000\)) --- số lượng nút trên cây.

  • Dòng thứ hai chứa \(N - 1\) số nguyên \(a_2, a_3, \ldots, a_n\) (\(1 \le a_i \le i-1\)) --- \(a_i\) là cha trực tiếp của nút \(i\).

Output

Với mỗi bộ dữ liệu, in ra một số nguyên là số lượng hoán vị Tốt modulo \(998\,244\,353\).

Example

Test 1

Input
3
3
1 1
3
1 2
6
1 1 1 2 2
Output
3
6
20
Note
  • Trong bộ dữ liệu đầu tiên, các hoán vị Tốt là \([1,2,3]\), \([2,1,3]\), và \([3,2,1]\).
  • Trong bộ dữ liệu thứ hai, tất cả \(3! = 6\) hoán vị đều là Tốt.

Scoring

  • Subtask \(1\) (\(20\%\) số điểm) : \(N \leq 10\).
  • Subtask \(2\) (\(20\%\) số điểm) : \(N \leq 20\).
  • Subtask \(3\) (\(20\%\) số điểm) : \(a_i = 1\) với \(i = 2..N\) trong tất cả các bộ dữ liệu.
  • Subtask \(4\) (\(20\%\) số điểm) : \(N \leq 100\).
  • Subtask \(5\) (\(20\%\) số điểm) : không có ràng buộc gì thêm.

root

Đoạn thẳng màu sắc

100 điểm

Bước vào cánh cửa đại học, có lẽ thứ ám ảnh nhất đối với Quân hiện tại là môn Giải tích. Cuộc sống Giải tích không hề dễ dàng, cuộc sống như đóng cửa tất cả các con đường của Quân. Tuy nhiên, môn Đại số tuyến tính lại mở ra cho Quân những ý tưởng mới. Mặc dù không có kiến thức về TÍNH GIỚI HẠN LIM LOGARIT ĐẠO HÀM NGUYÊN HÀM VI PHÂN TÍCH PHÂN TÍCH PHÂN BẤT ĐỊNH TÍCH PHÂN SUY RỘNG ĐẠO HÀM CẤP CAO ĐẠO HÀM NHIỀU BIẾN NGUYÊN HÀM VÔ CÙNG LỚN VÔ CÙNG BÉ CHUỖI SỐ L... nhưng Quân lại có khả năng tốt ở môn Đại số tuyến tính. Vì thế Quân đã đăng ký đi thi sơ loại Olympic Toán học Sinh viên của trường Đại học Công nghệ Thông tin tổ chức để thử sức ("mặc dù lý do chính là do thầy dạy Giải tích bảo nếu Quân đi thi thì sẽ được cộng "1" điểm quá trình). Bài toán hôm nay ra khá khó, có một bài liên quan tới các đoạn thẳng, nhưng Quân không giải được, Quân phải mở máy lên code để dễ hình dung hơn thay vì trình bày ra giấy, bài toán như sau:

  • Xét \(n\) đoạn thẳng trên trục số, đoạn thẳng thứ \(i\) là đoạn \([l_{i}, r_{i}]\). Hai đoạn thẳng gọi là "giao nhau" khi và chỉ khi tồn tại một số thực \(x\) sao cho \(l_{i} \leq x \leq r_{i}\) và \(l_{j} \leq x \leq r_{j}\). Đếm số cách tô màu các đoạn thẳng sao cho các đoạn thẳng giao nhau có màu khác nhau. Vì kết quả có thể rất lớn, in ra kết quả chia lấy dư cho \(998244353\).

Input

  • Dòng đầu tiên chứa hai số nguyên \(n\) và \(k\) (\(1 \leq n \leq 5 \times 10^5\), \(1 \leq k \leq 10^9\)) --- số lượng đoạn thẳng và số lượng màu.

  • \(n\) dòng tiếp theo, dòng thứ \(i\) chứa hai số nguyên \(l_i\) và \(r_i\) (\(1 \leq l_i \leq r_i \leq 10^9\)) --- điểm đầu và điểm cuối của đoạn thẳng thứ \(i\).

Output

Với mỗi bộ test, in ra một dòng chứa một số nguyên --- kết quả là số cách để tô màu các đoạn. Vì kết quả có thể rất lớn, hãy in ra kết quả modulo \(998244353\).

Example

Test 1

Input
4 3
4 7
3 4
5 8
1 3
Output
24

Test 2

Input
2 1000
100 200
300 400
Output
1000000

Scoring

  • \(20\%\) số test có \(n \leq 10\).

  • \(10\%\) số test có \(k = 1, n \leq 1000\).

  • \(10\%\) số test có \(k = 1, n \leq 5.10^5\).

  • \(30\%\) số test có \(n \leq 5000, r_{i} \leq 5000\).

  • \(30\%\) số test còn lại không có ràng buộc gì thêm.

root

Chia táo

100 điểm

Bạn có \(N\) quả táo với trọng lượng đã biết. Nhiệm vụ của bạn là chia \(N\) quả táo này thành hai nhóm, gọi là Nhóm A và Nhóm B, sao cho chênh lệch tuyệt đối về tổng trọng lượng giữa Nhóm A và Nhóm B là nhỏ nhất.

  • Mỗi quả táo phải thuộc duy nhất một nhóm (A hoặc B).
  • Nếu \(S_A\) là tổng trọng lượng của Nhóm A và \(S_B\) là tổng trọng lượng của Nhóm B, bạn cần tìm \(\min(|S_A - S_B|)\).

Input

  • Dòng đầu tiên chứa một số nguyên \(N\) (\(1 \le N \le 20\)) --- số lượng táo.
  • Dòng tiếp theo chứa \(N\) số nguyên \(p_1, p_2, \ldots, p_n\) (\(1 \le p_i \le 10^9\)) --- trọng lượng của mỗi quả táo.

Output

In ra một số nguyên duy nhất là chênh lệch trọng lượng tối thiểu giữa hai nhóm.

Example

Test 1

Input
5
3 2 7 4 1
Output
1

root

Giá trị và tần suất

100 điểm

Cho một mảng số nguyên \(A\) gồm \(N\) phần tử. Nhiệm vụ của bạn là liệt kê tất cả các giá trị duy nhất xuất hiện trong mảng, theo thứ tự từ nhỏ đến lớn, kèm theo tần suất xuất hiện của chúng.

Input

  • Dòng đầu tiên chứa một số nguyên dương \(N\) (\(1 \le N \le 1000\)).
  • Dòng thứ hai chứa \(N\) số nguyên \(A_1, A_2, \ldots, A_N\) (\(0 \le A_i \le 10^6\)), cách nhau bởi dấu cách.

Output

  • In ra nhiều dòng. Mỗi dòng chứa một giá trị và tần suất tương ứng của nó, cách nhau bởi một dấu cách. Các giá trị phải được in theo thứ tự tăng dần.

Example

Test 1

Input
7
4 4 2 3 3 2 1
Output
1 1
2 2
3 2
4 2
Xem thêm