Đ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

Nhóm hậu tố

100 điểm

Bạn được cung cấp một tập hợp gồm \(n\) xâu ký tự \(s_1, s_2, \ldots, s_n\).

Nhiệm vụ của bạn là tìm một tập con \(s_{i_1}, s_{i_2}, \ldots, s_{i_k}\) \((1 \leq i_1 < i_2 < \ldots < i_k \leq n)\) thoả mãn hai điều kiện sau:

  1. Tồn tại một xâu \(t\) sao cho mỗi xâu trong tập con đã tìm được đều là hậu tố của xâu \(t\).

  2. Số lượng xâu trong tập con phải là lớn nhất có thể.

Nhiệm vụ của bạn là in ra số lượng xâu trong tập con này.

Input

  • Dòng đầu tiên chứa một số nguyên \(n\) \((1 \leq n \leq 10^5)\) --- số lượng xâu trong tập hợp.
  • \(n\) dòng tiếp theo, mỗi dòng chứa một xâu \(s_i\) --- xâu ký tự thứ \(i\). Mỗi xâu đều không rỗng và chỉ chứa các chữ cái Latin thường.
  • Tổng độ dài của tất cả các xâu \(s_i\) không vượt quá \(10^5\).

Output

In ra một số nguyên duy nhất --- số lượng xâu lớn nhất có thể trong tập con thoả mãn điều kiện.

Example

Test 1

Input
6
bb
bb
b
aaa
aa
z
Output
3

Scoring

Gọi \(S\) là tổng độ dài các xâu trong input.

  • Có \(25\%\) số điểm có \(n \leq 8, S \leq 30\).
  • Có \(25\%\) số điểm có \(n \leq 100, S \leq 1000\).
  • Có \(25\%\) số điểm có \(n \leq 500\).
  • \(25\%\) số điểm còn lại không có ràng buộc gì thêm.

root

Dãy cấp số nhân

100 điểm

Cho dãy gồm \(n\) số nguyên \(a_1, a_2, ..., a_n\). Dãy số \(b_1, b_2, ..., b_k\) được gọi là dãy cấp số nhân công bội \(q\) khi và chỉ khi \(b_{i + 1} = b_i * q\) với mọi \(1 \leq i < k\).

Yêu cầu:

Cho số nguyên \(q\), với mỗi \(k(1 < k \leq n)\), hãy đếm số dãy con (không nhất thiết liên tiếp) độ dài
\(k\) của dãy \(a_1, a_2, ..., a_n\) là dãy cấp số nhân công bội \(q\).

Input

  • Dòng đầu tiên gồm hai số nguyên \(n, q(1 \leq n \leq 10^5, 2 \leq q \leq 10^9)\).

  • Dòng thứ hai chưa \(n\) số nguyên \(a_1, a_2, ..., a_n(1 \leq a_i \leq 10^9)\).

Output

  • Ghi ra thiết bị ra chuẩn một dòng gồm \(n - 1\) số nguyên, số thứ \(s(1 \leq s < n)\) là số dãy con độ dài \((s + 1)\) là dãy cấp số nhân công bội \(q\) chia dư cho \((10^9 + 7)\).

Example

Test 1

Input
5 2
1 2 8 4 2
Output
3 1 0 0 

Scoring

  • Có \(25\%\) số điểm của bài toán thỏa mãn \(n \leq 20\).

  • Có \(25\%\) số điểm của bài toán thỏa mãn \(n \leq 100\).

  • Có \(25\%\) số điểm của bài toán thỏa mãn \(n \leq 1000\).

  • Có \(25\%\) số điểm của bài toán không có ràng buộc gì thêm.

root

Du lịch vui vẻ

100 điểm

Khải rất yêu du lịch. Một ngày Khải được mẹ cho rất nhiều tiền để bay sang Nhật Bản tham gia các sự kiện về văn hóa Nhật, Khải vô cùng thích thú. Khải đã tìm hiểu kĩ thông tin các sự kiện diễn ra, và cậu nhận thấy rằng nếu cậu tham gia được sự kiện \(i\) thì sẽ tăng lên độ vui vẻ là \(v_i\). Dịp này ở nhật bản có rất nhiều sự kiện được tổ chức, cụ thể có \(N\) sự kiện \(s_1,s_2,…,s_N\) (\(s_i\in [1,K]\)) diễn ra theo thứ tự (có nhiều sự kiện có thể lặp lại). Cá nhân Khải thì lại muốn tham gia các sự kiện theo thứ tự \(t_1,t_2,…,t_M\) (\(t_i\in [1,K]\)), tất nhiên nếu cậu tham gia được sự kiện \(t_i\) thì độ vui vẻ của cậu sẽ được cộng thêm \(v_(t_i)\). Tuy nhiên, việc Khải muốn tham gia các sự kiện theo thứ tự ưa thích dẫn tới việc sẽ có một số sự kiện của Nhật Bản mà Khải không tham gia được hay là các sự kiện mà Khải muốn tham gia cũng không tham gia được. Khải tính ra rằng nếu cậu bỏ qua các sự kiện ưa thích \(t_p,t_(p+1),…,t_q\) (\(q\geq p\), \(q-p+1\) sự kiện ưa thích liên tiếp) thì độ vui vẻ của cậu giảm xuống một lượng \(-(A+(q-p+1).B)\). Một điều nữa, nếu như Khải tham gia hai sự kiện \(s_p\) và \(s_q\) (\(p+2\leq q\)) mà không tham gia sự kiện nào giữa hai sự kiện này thì độ vui vẻ của cậu cũng giảm xuống một lượng \(-(A+(q-p-1)B)\).

Yêu cầu: Tìm độ vui vẻ lớn nhất mà Khải có thể có được.

Input

  • Dòng đầu gồm các số nguyên dương \(K,N,M,A\) và \(B\) theo thứ tự (\(K\leq 1000;n,m\leq 5000;-100\leq A,B\leq 0\)).

  • Dòng thứ hai chứa \(K\) số nguyên dương \(v_1,v_2,…,v_k\) (\(1\leq v_i\leq 100\)).

  • Dòng thứ ba chứa \(N\) số nguyên dương \(s_1,s_2,…,s_N\) (\(s_i\in [0,K]\)).

  • Dòng thứ 4 chứa \(M\) số nguyên dương \(t_1,t_2,…,t_M\) (\(t_i\in [0,K]\)).

Output

  • In ra kết quả bài toán là độ vui vẻ lớn nhất của Khải.

Example

Test 1

Input
1 5 3 -5 -4
10
1 1 1 1 1
1 1 1
Output
30

Scoring

  • Subtask \(1\) (\(10\%\) số điểm): \(K=1; M\leq N \leq 10^3\).

  • Subtask \(2\) (\(15\%\) số điểm): \(K=1; N<M\leq 10^3\).

  • Subtask \(3\) (\(15\%\) số điểm): \(A=B=0\).

  • Subtask \(4\) (\(15\%\) số điểm): \(A=0\).

  • Subtask \(5\) (\(15\%\) số điểm): \(B=0\).

  • Subtask \(6\) (\(15\%\) số điểm): \(N,M<100\).

  • Subtask \(7\) (\(15\%\) số điểm): Không có giới hạn gì thêm.

root

Câu 4 (5.0 điểm) : Chuỗi tốt

100 điểm

Ta định nghĩa một chuỗi \(T\) có độ dài \(N\) chỉ gồm \(0\) và \(1\) được gọi là chuỗi tốt nếu chỉ tồn tại duy nhất một chỉ số \(i\) \((1 \le i \le N - 1)\) sao cho hai kí tự liên tiếp \(T_i\) và \(T_{i+1}\) giống nhau.

Bạn được cho một chuỗi \(S\) có độ dài \(N\) chỉ gồm các ký tự \(0\) và \(1\). Với mỗi vị trí \(i\) trong chuỗi, bạn có thể lựa chọn có thực hiện thao tác hay không; nếu thực hiện thì ký tự thứ \(i\) sẽ được đảo giá trị (\(0\) thành \(1\) hoặc \(1\) thành \(0\)) với chi phí tương ứng là \(C_i\).

Yêu cầu: Hãy tìm tổng chi phí nhỏ nhất để biến chuỗi \(S\) thành một chuỗi tốt.

Input

Vào từ file CHUOITOT.INP gồm:

  • Dòng đầu tiên chứa số nguyên dương \(n\) -- là độ dài xâu \(S\) \((2 \le n \le 2 \times 10^5)\).
  • Dòng thứ hai chứa chuỗi \(S\) chỉ gồm các kí tự \(0\) hoặc \(1\).
  • Dòng thứ ba chứa dãy \(c\) gồm \(n\) số nguyên dương \(c_1, c_2, \dots, c_n\) \((1 \le c_i \le 10^9)\) là chi phí phải bỏ ra nếu thực hiện thao tác đảo ký tự tại vị trí \(i\) trong chuỗi \(S\).

Output

Ghi ra file CHUOITOT.OUT một số nguyên duy nhất là tổng chi phí nhỏ nhất để biến chuỗi \(S\) thành một chuỗi tốt.

Example

Test 1

Input
5
00011
3 9 2 6 4
Output
7
Note

Giải thích: Ta thực hiện thao tác ở vị trí \(i = 1, 5\) khi đấy chuỗi \(S = 10010\). Đây là chuỗi tốt với chi phí biến đổi là \(7\). Không có cách nào khác để biến chuỗi \(S\) thành chuỗi tốt với tổng chi phí nhỏ hơn \(7\) nên \(7\) là kết quả bài toán.

Scoring

  • \(25\%\) số test: \(n \le 20\)
  • \(25\%\) số test: \(n \le 100\)
  • \(25\%\) số test: \(s\) là toàn kí tự giống nhau
  • \(25\%\) số test: Không có ràng buộc gì thêm
Xem thêm