Đ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

Phân biệt

100 điểm

Trong quá trình huấn luyện để chuẩn bị cho đấu trường ICPC, các bạn trại sinh sẽ được thử sức với nhiều dạng bài tập khác nhau. Một trong những bài toán đầu tiên được đưa ra nhằm kiểm tra tư duy chiến lược và khả năng xử lý xâu của các bạn.

Ban tổ chức Bootcamp cần đặt một cái tên đặc biệt cho phần thưởng dành cho những học viên xuất sắc nhất. Tên này phải được lấy từ một xâu chủ đề cho trước, đó là một chuỗi các ký tự tiếng Anh viết thường. Cụ thể, tên của phần thưởng phải là một xâu con (một dãy các ký tự liên tiếp) của xâu chủ đề.

Để thể hiện sự đa dạng trong kỹ năng của các học viên, tên của phần thưởng còn phải có ít nhất \(k\) ký tự phân biệt.

Yêu cầu: Hãy giúp ban tổ chức đếm số cách chọn một xâu con từ xâu chủ đề thỏa mãn điều kiện trên. Hai cách chọn được coi là khác nhau nếu vị trí bắt đầu hoặc vị trí kết thúc của xâu con khác nhau.

Input

  • Dòng đầu tiên chứa hai số nguyên dương \(n\) và \(k\) (\(1 \le n \le 10^6, 1 \le k \le 26\)), lần lượt là độ dài của xâu chủ đề và số lượng ký tự phân biệt tối thiểu yêu cầu.
  • Dòng thứ hai chứa xâu chủ đề gồm \(n\) ký tự trong bảng chữ cái tiếng Anh viết thường.

Output

  • In ra một số nguyên không âm duy nhất là tổng số xâu con thỏa mãn.

Example

Test 1

Input
5 3
abacd
Output
5
Note

Với xâu chủ đề abacd và \(k=3\), các xâu con thỏa mãn là:

  • abac
  • abacd
  • bac
  • bacd
  • acd

Có 5 xâu con thỏa mãn.

Scoring

  • \(20\%\) số test có \(k=1\).
  • \(20\%\) số test có \(k=2\).
  • \(20\%\) số test có \(n \le 10^2\).
  • \(20\%\) số test có \(n \le 10^4\).
  • \(20\%\) số test không có ràng buộc gì thêm.

root

Bảng số

100 điểm

Trong kỳ huấn luyện UIT Algo Bootcamp, các trại sinh sẽ được thử thách với những bài toán đa dạng nhằm nâng cao kỹ năng giải thuật, chuẩn bị cho đấu trường ICPC. Một trong những bài tập đầu tiên liên quan đến ma trận, một chủ đề quan trọng trong nhiều kỳ thi lập trình.

Giảng viên đưa ra hai dãy số \(A\) và \(B\). Dãy \(A\) gồm \(m\) phần tử, và dãy \(B\) gồm \(n\) phần tử. Mỗi phần tử trong hai dãy này chỉ có thể nhận một trong ba giá trị: \(-1, 0, 1\). Từ hai dãy này, các bạn sẽ tạo ra một ma trận \(C\) có kích thước \(m \times n\), với mỗi phần tử tại vị trí \((i, j)\) được tính bằng công thức: \(C[i][j] = A[i] \times B[j]\).

Để đánh giá khả năng xử lý dữ liệu và tìm kiếm mô hình của các trại sinh, một khái niệm mới được giới thiệu: "ma trận con vuông cân bằng". Một ma trận con vuông kích thước \(s\) của ma trận \(C\) được coi là "cân bằng" nếu nó thỏa mãn hai điều kiện sau:

  • Các phần tử trên đường chéo chính của ma trận con đều bằng \(1\).
  • Tổng tất cả các phần tử trong ma trận con đó bằng \(0\).

Yêu cầu: Cho hai dãy số \(A\) và \(B\), hãy đếm tổng số ma trận con vuông "cân bằng" có thể tìm thấy trong ma trận \(C\).

Input

  • Dòng đầu tiên chứa hai số nguyên dương \(m\) và \(n\).
  • Dòng thứ hai chứa \(m\) số nguyên mô tả dãy \(A\).
  • Dòng thứ ba chứa \(n\) số nguyên mô tả dãy \(B\).

Output

  • In ra một dòng duy nhất chứa một số nguyên là tổng số ma trận con vuông "cân bằng".

Example

Test 1

Input
3 4
1 -1 1
1 0 -1 1
Output
1

Scoring

  • Subtask 1 (20 điểm): \(m, n \le 30\).
  • Subtask 2 (30 điểm): \(m, n \le 300\).
  • Subtask 3 (30 điểm): \(m, n \le 1000\).
  • Subtask 4 (20 điểm): \(m \times n \le 5 \times 10^6\).

root

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

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à tìm giá trị có số lần xuất hiện nhiều nhất trong mảng. Nếu có nhiều giá trị có cùng số lần xuất hiện tối đa, bạn cần chọn giá trị có số nhỏ nhất.

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 một dòng duy nhất, gồm hai số nguyên: giá trị tìm được và tần suất của nó, cách nhau bởi một dấu cách.

Example

Test 1

Input
6
9 4 0 4 5 9
Output
4 2

root

Pre - LCA

100 điểm

Một công ty lớn với n nhân viên được tổ chức dưới dạng một hệ thống phân cấp dạng cây, nơi mỗi nhân viên, ngoại trừ Tổng Giám Đốc (nhân viên số 1), đều có một ông chủ trực tiếp. Tổng giám đốc là người duy nhất không có ông chủ.

Nhiệm vụ của bạn là trả lời q truy vấn, mỗi truy vấn hỏi rằng: "Ai là người sếp cao hơn nhân viên \(x\) \(k\) bậc trong hệ thống phân cấp?"

Để làm rõ hơn, truy vấn sẽ yêu cầu bạn xác định người sếp của một nhân viên theo khoảng cách (số bậc) nhất định trong chuỗi mối quan hệ cấp trên cấp dưới. Nếu không tồn tại người sếp cách \(x\) đúng \(k\) bậc, hãy trả lời là \(-1\).

Input

  • Dòng đầu tiên chứa hai số nguyên dương \(n\) và \(q\) (\(1 \leq n, q \leq 2 \times 10^5\)) --- số lượng nhân viên trong công ty và số lượng truy vấn.
  • Dòng thứ hai chứa \(n-1\) số nguyên \(e_2, e_3, \ldots, e_n\) (\(1 \leq e_i \leq i-1\)), trong đó \(e_i\) biểu thị rằng nhân viên \(i\) có ông chủ trực tiếp là \(e_i\).
  • Mỗi trong \(q\) dòng tiếp theo chứa hai số nguyên \(x\) và \(k\) (\(1 \leq x \leq n\), \(0 \leq k \leq n\)), biểu thị một truy vấn: "Ai là sếp của nhân viên \(x\) ở \(k\) bậc trên?"

Output

Với mỗi truy vấn, in ra một số nguyên duy nhất trên một dòng:

  • Nếu tồn tại người sếp cao hơn nhân viên \(x\) đúng \(k\) bậc, hãy in số hiệu của người đó.
  • Nếu không tồn tại người sếp cách \(x\) đúng \(k\) bậc, hãy in \(-1\).

Example

Test 1

Input
5 3
1 1 3 3
4 1
4 2
4 3
Output
3
1
-1

Scoring

Trong tất cả các test :

  • \(1 \leq n, q \leq 2 \times 10^5\)
  • \(1 \leq e_i \leq i-1\) với \(2 \leq i \leq n\)
  • \(1 \leq x \leq n\), \(0 \leq k \leq n\)

  • \(50\%\) số test có \(n, q \leq 5000\).

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