[DSA WEEKLY CONTEST T11 2024]. TEST 3. STRING

[Xâu Ký Tự]. Bài 62. Tìm kiếm trong đám đông

Nộp bài
Time limit: 1.0 / Memory limit: 256M

Point: 100

Một đám đông được xếp thành N hàng, mỗi hàng có 1 số người nhất định. Nhiệm vụ của bạn là hãy tìm tên người đứng ở số thứ tự y trong hàng x.

Ví dụ người đứng ở hàng 3 số thứ tự 5 có tên là X


Đầu vào

Dòng 1 là NQ tương ứng với số hàng của đám đông và số truy vấn

N dòng tiếp theo mỗi dòng mô tả 1 hàng người, trong đó số đầu tiên của 1 dòng là số người có trong hàng đó gọi là M, M từ tiếp theo là tên của M người trong hàng, tên người chỉ bao gồm 1 từ.

Q dòng tiếp theo mỗi dòng là 2 số x, y tương ứng với truy vấn


Giới hạn

1<=N,M<=10^5

1<=Q<=1000

1<=x<=N

y đảm bảo là số thứ tự phù hợp với từng hàng


Đầu ra

In ra tên người của mỗi truy vấn trên từng dòng


Ví dụ :

Input 01
8 9
5 Biden Hanh Elon Ngoc Duc 
12 Hanh Biden Thuy Thuy Duc Tim Biden Thuy Tim Lan Elon Nhung 
10 Ngoc Phuong Duc Ngoc Hanh Duc Phuong Tim Lan Lan 
10 Nhung Lan Ngoc Ngoc Biden Phuong Nhung Elon Phuong Duc 
7 Lan Elon Lan Tim Biden Ngoc Elon 
7 Phuong Hanh Lan Tim Hanh Elon Duc 
10 Hanh Hanh Biden Duc Nhung Duc Tim Elon Lan Thuy 
14 Biden Hanh Lan Duc Phuong Thuy Thuy Thuy Thuy Nhung Biden Lan Phuong Hanh 
4 10
4 9
2 5
7 7
1 4
4 3
1 1
4 7
4 3
Output 01
Duc
Phuong
Duc
Tim
Ngoc
Ngoc
Biden
Nhung
Ngoc

[Xâu Ký Tự]. Bài 63. Xâu ký tự BTC

Nộp bài
Time limit: 1.0 / Memory limit: 256M

Point: 100

28Tech rất thích BTC và bây giờ anh ta nhờ bạn giúp 1 bài toán, nếu làm đúng bạn sẽ nhận được 1 BTC tương đương khoảng 64K đô la tại tháng 4/2024. Bài toán như sau : Cho xâu S có độ dài N chỉ bao gồm 3 chữ cái là B, T, C trong đó có ít nhất b chữ B, ít nhất t chữ T, ít nhất c chữ C, bạn hãy xác định có thể tồn tại bao nhiêu xâu S.

Gợi ý : Dùng vòng for lồng nhau để xét được mọi cặp thỏa mãn phương trình x + y + z = N với x >= b, y >= t và z >= c.

Bài này các bạn sử dụng kiến thức về Multinomial Coefficient. Ví dụ bài toán là cho từ mississippi, hỏi có bao nhiêu từ khác nhau có thể tạo thành bằng cách sắp đặt lại các kí tự trong từ này. Nó tương tự như đếm số cách chia n phần tử thành các tập có k1, k2, k3…km phần tử.

Ví dụ N = 4, b = 1, t = 1, c = 1 thì có tất cả 36 xâu thỏa mãn đó chính là b = 2, t = 1, c = 1 có 4! / (2! * 1! * 1!) = 12 cách b = 1, t = 2, c = 1 có 4! / (2! * 1! * 1!) = 12 cách b = 1, t = 1, c = 2 có 4! / (2! * 1! * 1!) = 12 cách


Đầu vào

Dòng 1 là T : số test case

T dòng tiếp theo mỗi dòng là 1 test gồm 4 số N, b, t, c


Giới hạn

1<=T<=1000

1<=N<=20

1<=b,t,c<=N


Đầu ra

In ra kết quả của mỗi test trên từng dòng


Ví dụ :

Input 01
5
15 4 2 1
15 6 5 3
17 3 1 7
17 1 1 11
16 6 1 6
Output 01
11043461
1411410
37925606
990624
5102240

[Xâu Ký Tự]. Bài 64. Xâu chia hết

Nộp bài
Time limit: 1.0 / Memory limit: 256M

Point: 100

Cho xâu ký tự S gồm các chữ số từ 0 tới 9, bạn hãy đếm số lượng xâu con liên tiếp chia hết cho 8 mà không chia hết cho 3.

Gợi ý : Dùng 2 vòng for lồng nhau để xét tất cả các xâu con, với mỗi xâu con thì tìm số dư của xâu con này vs X để xác định xem nó có chia hết cho X hay không. Lý thuyết này có ở bài tập phép chia dư Chia dư số nguyên lớn với 1 số nguyên

Bây giờ bạn chỉ cần đếm số xâu con chia hết cho 8 - số xâu con chia hết cho 24 là ra số xâu con chia hết cho 8 nhưng không chia hết cho 3.


Đầu vào

Dòng 1 là T : số test case

T dòng tiếp theo mỗi dòng là 1 test gồm xâu S


Giới hạn

1<=T<=100

S có không quá 500 chữ số


Đầu ra

In ra kết quả của mỗi test trên từng dòng


Ví dụ :

Input 01
5
9824640
13198
9412690602
5893653
25524773029
Output 01
10
1
0
3
1

[Xâu Ký Tự]. Bài 65. . Đếm từ thuận nghịch

Nộp bài
Time limit: 1.0 / Memory limit: 256M

Point: 100

Cho một xâu S chứa các từ được phân cách nhau bởi dấu chấm (.), dấu phẩy (,) và dấu cách.

Bạn hãy liệt kê xem mỗi từ thuận nghịch trong xâu xuất hiện bao nhiêu lần và liệt kê theo thứ tự xuất hiện.


Đầu vào

1 dòng duy nhất chứa xâu đầu vào


Giới hạn

1<=len(S)<=10^5

S chỉ chứa ký tự in thường, in hoa và dấu chấm, dấu phẩy.


Đầu ra

In ra theo nhiều dòng, mỗi dòng là một từ thuận nghịch kèm theo số lần xuất hiện của nó.


Ví dụ :

Input 01
cppppc ,tim ronaldo apple ,,appleelppa tim 28tech ,timmit messi ronaldo .tim 28techhcet82 cppppc .elonnole dsa
Output 01
cppppc 2
appleelppa 1
timmit 1
28techhcet82 1
elonnole 1

[Xâu Ký Tự]. Bài 66. Email 28tech

Nộp bài
Time limit: 1.0 / Memory limit: 256M

Point: 100

Cho 1 danh sách tên người đang làm việc tại 28Tech, bạn hãy tạo email làm việc cho mỗi người.

Email được tạo bằng cách ghép tên người đó với phần tên họ và đệm ở dạng chữ cái in thường cùng với đuôi email là @28tech.com.vn.

Ví dụ người có tên Nguyen Van Nam sẽ được cấp email là : [email protected]


Đầu vào

Dòng 1 gồm số tên người : N

N dòng tiếp theo mỗi dòng là tên của 1 người có thể không ở dạng chuẩn hóa


Giới hạn

1<=N<=1000

Tên người là một chuỗi không quá 100 ký tự, chỉ bao gồm chữ cái và dấu cách


Đầu ra

In ra email của từng người theo thứ tự


Ví dụ :

Input 01
5
Vo HOng PhuONG  NHUNG   
PHAm NGoc LAN
Ngo NGoc Thao
Vo NgoC Thao
NguyEN AnH Thao
Output 01
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]

[Xâu Ký Tự]. Bài 67. Lọc tin nhắn

Nộp bài
Time limit: 1.0 / Memory limit: 256M

Point: 100

28tech đang phát triển 1 bộ lọc tin nhắn cho mạng xã hội 28Social nhưng gặp quá nhiều khó khăn vì chưa tìm được lập trình viên giỏi có thể triển khai tính năng này. Bộ lọc này sẽ tự động loại bỏ các tin nhắn chứa các từ nằm trong danh sách các từ được coi là vi phạm tiêu chuẩn cộng đồng. Bạn được cung cấp 1 loạt các từ nằm trong danh sách các từ bị cấm được lưu trong 1 file CSV và các tin nhắn. Bạn hãy chứng minh mình là một lập trình viên giỏi bằng cách tự mình phát triển bộ lọc tin nhắn này.

Đối với mỗi tin nhắn bạn hãy in ra cụm từ block nếu tin nhắn này chứa bất cứ 1 từ nào trong danh sách các từ vi phạm, ngược lại bạn hãy in ra cụm từ accept.

Lưu ý là từ vi phạm sẽ bị loại bỏ mà không cần phân biệt chữ hoa chữ thường, ví dụ từ dog là vi phạm thì những từ như Dog, DOG, dOG… đều sẽ bị coi là vi phạm.


Đầu vào

Dòng 1 là 1 xâu có không quá 1000 kí tự chứa danh sách các từ bị cấm được viết cách nhau 1 dấu phẩy (,).

Các dòng tiếp theo chứa các tin nhắn, mỗi tin nhắn có không quá 1000 kí tự. Có không quá 1000 dòng tin nhắn


Giới hạn

Các xâu ký tự đề bài cho đều không quá 1000 kí tự

Số lượng từ bị cấm không quá 100 từ


Đầu ra

Đối với mỗi tin nhắn in ra block hoặc accept


Ví dụ :

Input 01
dead,gun,shot,bitcoin,knife
wanna buy a guN
I love you
learn dsa with 28tech
what r you doing???
is bitcoiN a scammer
Output 01
block
accept
accept
accept
block

[Xâu Ký Tự]. Bài 68. Phép cộng 28Tech

Nộp bài
Time limit: 1.0 / Memory limit: 256M

Point: 200

28Tech cho bạn cách mã hóa các số nguyên bằng cách thay nó bằng các dấu đóng mở ngoặc tròn với quy luật như sau : Số 0 tương đương với tập rỗng là (), các số > 0 sẽ là tập hợp tất cả các số nhỏ hơn nó viết liền nhau theo thứ tự từ bé đến lớn, ví dụ số 3 sẽ được viết (0,1,2) trong đó 0, 1, 2 ở dạng mã hóa. Vì thế ta sẽ được

Số 0 : ()

Số 1 : (())

Số 2 : ((),(()))

Số 3 : ((),(()),((),(())))

Số 4 : ((),(()),((),(())),((),(()),((),(()))))

28Tech cho bạn 2 số x, y dưới dạng được mã hóa, hãy in ra tổng 2 số dưới dạng mã hóa, biết rằng tổng của 2 số không vượt quá 15.


Đầu vào

Dòng 1 gồm số bộ test T

2T dòng tiếp theo mỗi test gồm 2 dòng tương ứng với 2 số x, y


Giới hạn

1<=T<=100

0<=x,y<=15


Đầu ra

In ra kết quả mỗi test trên 1 dòng


Ví dụ :

Input 01
5
()
((),(()))
()
((),(()))
((),(()))
(())
()
()
((),(()),((),(())),((),(()),((),(()))))
()
Output 01
((),(()))
((),(()))
((),(()),((),(())))
()
((),(()),((),(())),((),(()),((),(()))))

[Xâu Ký Tự]. Bài 69. Xâu con lớn nhất

Nộp bài
Time limit: 1.0 / Memory limit: 256M

Point: 200

Hôm nay đi xem phim tại rạp chiếu phim cùng bạn Tèo, Tèo biết là một sinh viên IT đang học những bài học về chuỗi ký tự. Tèo muốn tìm ra xâu con các ký tự (không cần liên tiếp) từ tên của bộ phim 2 bạn xem ngày hôm nay sao cho xâu con đó có thứ tự từ điển lớn nhất. thì cũng chỉ mới học về chuỗi ký tự nên kỹ năng lập trình còn chưa vững nên muốn nhờ bạn giúp tìm ra xâu con lớn nhất đó. Bạn hãy giúp tìm ra xâu con mà Tèo yêu cầu nhé.


Đầu vào

Dòng duy nhất chứa tên của bộ phim.


Giới hạn

Tên của bộ phim là chuỗi ký tự chỉ bao gồm ký tự in hoa hoặc in thường, độ dài của tên bộ phim không vượt quá 2.10^5 ký tự.


Đầu ra

In ra xâu con có thứ tự từ điển lớn nhất. Lưu ý là xâu con này không nhất thiết phải chứa các ký tự liên tiếp


Ví dụ :

Input 01
bbbbccccddaddczaabbcd
Output 01
zd

[Xâu Ký Tự]. Bài 70. Gia phả

Nộp bài
Time limit: 1.0 / Memory limit: 256M

Point: 200

28Tech lớn lên trong 1 dòng họ mà ở đây họ đặt tên cho những người trong dòng họ phải tuân theo một quy tắc, theo trưởng họ thì điều này sẽ làm gia phả của dòng họ trở nên đẹp hơn. Quy tắc đặt tên ở đây là tên của một người bất kỳ tròng dòng họ không được là phần đầu trong tên của 1 người khác nào đó trong dòng họ.

Ví dụ dòng họ có 3 người tên 28techa, 28tech@#a, 28tet là chuẩn quy tắc, trong khi đó nếu dòng họ có 3 người tên 28tech, 28tech@ và 28tech28tech lại không phải là chuẩn quy tắc. Vì 28tech là phần đầu của 28tech@ hoặc 28tech28tech.

Cho danh sách tên người trong dòng họ của 28Tech, bạn hãy in ra 28tech nếu dòng họ đã đặt tên đúng quy tắc, ngược lại bạn cần in ra 29tech.


Đầu vào

Dòng đầu tiên chứa số N - số lượng tên người trong dòng họ

N dòng tiếp theo chứa tên 1 người trong dòng họ là chuỗi không có dấu cách và không quá 100 ký tự.


Giới hạn

1<=N<=10^5


Đầu ra

In ra 28tech hoặc 29tech.


Ví dụ :

Input 01
3
aabc
aabbb
az
Output 01
28tech
Input 02
3
28t
28techtech
28th
Output 02
29tech

Đường đi lớn nhất

Nộp bài
Time limit: 1.0 / Memory limit: 256M

Point: 200

Hệ số nhị phân và hệ thập lục phân (16) là 2 hệ số yêu thích của 28Tech, ngoài ra 28Tech cũng yêu thích những số lớn nữa. Bây giờ 28Tech cung cấp cho bạn 1 mảng 2 chiều nhị phân cỡ N hàng và N cột bao gồm các số 0 và 1, bạn xuất phát từ ô (1, 1) và tìm đường đi tới ô (N, N), tại mỗi lần di chuyển bạn được đi từ ô hiện tại xuống dưới hoặc sang phải. Nghĩa là nếu bạn đang ở ô (i, j) thì bạn có thể đi xuống ô (i + 1, j) hoặc ô (i, j + 1).

Trên đường đi đó bạn sẽ lấy các số 0 hoặc 1 tại ô bạn đi qua và khi đó bạn sẽ tạo được một số nhị phân có độ dài 2*N - 1, nhiệm vụ của bạn là hãy tìm cách đi tạo ra số nhị phân lớn nhất và in ra nó dưới dạng hệ số 16.

Ví dụ trong mảng 2 chiều này cách đi tạo ra số nhị phân lớn nhất là 1111011 tương ứng với số 123 trong hệ thập phân và 7B trong hệ 16, vì thế bạn cần in 7B


Đầu vào

Dòng đầu tiên chứa số N

N dòng tiếp theo mỗi dòng chứa N số của ma trận


Giới hạn

1<=N<=100


Đầu ra

In ra số nhị phân lớn nhất tạo thành ở hệ 16.


Ví dụ :

Input 01
8
1 0 0 1 0 0 0 0 
0 0 0 0 0 1 1 0 
0 1 1 0 0 0 1 1 
1 1 0 1 0 0 0 0 
1 1 0 0 0 0 1 1 
0 1 1 0 1 0 0 1 
0 1 1 0 1 1 0 0 
0 1 1 1 1 0 0 1
Output 01
4FF9
Input 02
5
1 1 0 0 0 
1 1 0 0 0 
1 1 0 0 0 
0 1 0 1 0 
1 0 0 1 1
Output 02
1F7