| # | Bài tập | Điểm | Thời gian: | Giới hạn bộ nhớ |
|---|---|---|---|---|
| 1 | Cánh Diều - DELETE - Xoá kí tự trong xâu | 100 (p) | 1.0s | 256M |
| 2 | Cánh Diều - COUNTWORD - Đếm số từ | 100 (p) | 1.0s | 256M |
| 3 | Cánh diều - SUBSTR2 - Xâu con 2 | 100 (p) | 1.0s | 256M |
| 4 | Cánh diều - FINDSTRING - Tìm xâu con đầu tiên | 100 (p) | 1.0s | 256M |
| 5 | Ký tự mới | 100 (p) | 1.0s | 640M |
| 6 | Ký tự cũ | 100 (p) | 1.0s | 640M |
| 7 | Hoa thành thường | 100 (p) | 1.0s | 256M |
| 8 | Số đảo ngược | 100 (p) | 1.0s | 256M |
| 9 | Xâu đối xứng (Palindrom) | 100 (p) | 1.0s | 640M |
| 10 | Bảng mã Ascii (HSG '18) | 100 (p) | 1.0s | 256M |
| 11 | Nén xâu | 100 (p) | 1.0s | 256M |
| 12 | Đếm ký tự (HSG'19) | 100 (p) | 1.0s | 256M |
| 13 | Độ tương đồng của chuỗi | 100 (p) | 1.0s | 1G |
| 14 | Giải nén xâu | 100 (p) | 1.0s | 256M |
Viết chương trình nhập vào một xâu \(s\), và một kí tự \(c\). Hãy tạo xâu mới bằng cách xoá các kí tự \(c\) trong xâu \(s\).
Dòng đầu ghi xâu \(s\), độ dài không quá \(10^6\).
Dòng thứ hai ghi một kí tự (latin thường).
Test 1
123a45a6a78
a
12345678
Nhập vào từ bàn phím hai xâu \(s_1\), \(s_2\), mỗi xâu không chứa kí tự dấu cách dư ở đầu, cuối xâu, phân cách giữa các từ chỉ là \(1\) dấu cách. Nếu xâu không chứa dấu cách thì nó là một từ, trong trường hợp ngược lại, dấu cách phân tách các từ trong xâu. Viết chương trình in ra tổng số từ trong cả hai xâu.
Dòng đầu ghi xâu \(s_1\)
Dòng thứ \(2\) ghi xâu \(s_2\)
Các xâu chỉ gồm các kí tự latin, kí tự chữ số và dấu cách, có độ dài không quá \(10^6\)
Test 1
Duoi trang quyen da goi he
Dau tuong lua luu lap loe dam bong
14
Xác định xâu con \(x\) của xâu \(y\) biết \(x\) gồm các ký tự trong đoạn chỉ số \([L;R)\) của \(y\) (từ \(L\) tới \(R\), nhưng không bao gồm \(R\))
Cho một xâu kí tự \(y\) chỉ gồm các kí tự latin viết thường có thể chứa dấu cách. Có \(N\) truy vấn, mỗi truy vấn gồm hai số nguyên \(L, R\) \((0\le L \le R < \texttt{len}(y))\).
Yêu cầu: với mỗi truy vấn, in ra xâu con của xâu \(y\) từ chỉ số \(L\) tới chỉ số \(R\)?
Dòng đầu ghi xâu y có độ dài không quá \(10^6\); xâu gồm các kí tự latin và số.
Dòng thứ hai ghi số nguyên \(N\) là số lượng truy vấn \((1\le N\le 100)\)
\(N\) dòng tiếp theo mỗi dòng ghi hai số nguyên \(L, R\)
Test 1
0123456
3
2 5
2 3
0 7
234
2
0123456
Hàm \(A.find(B)\) trả về vị trí đầu tiên xuất hiện của xâu \(B\) trong xâu \(A\). Nếu không tồn tại xâu con \(B\) trong \(A\), trả về \(-1\).
Sử dụng hàm find thực hiện các yêu cầu sau:
Cho một xâu \(S\) và \(Q\) truy vấn, mỗi truy vấn gồm có một xâu \(x\): hãy tìm vị trí đầu tiên xuất hiện của xâu \(x\) trong xâu \(S\) ban đầu. Xâu gồm các kí tự latin gồm chữ và số.
Dòng đầu ghi xâu \(S\) có độ dài không quá \(10^6\)
Dòng thứ hai ghi \(Q\) là số lượng truy vấn
Tiếp theo là \(Q\) dòng, mỗi dòng ghi một xâu \(x\) có độ dài không quá \(10^6\)
Test 1
Cai xac xinh xinh
2
xinh
be
8
-1
Viết chương trình nhập vào một ký tự in hoa, in ra ký tự thường tương ứng.
Test 1
A
a
Viết chương trình nhập vào một ký tự thường, in ra ký tự in hoa tương ứng.
Test 1
a
A
Cho một chuỗi kí tự gồm \(n\)n kí tự bất kì \((n≤100)\). Hãy đổi tất cả chữ hoa có trong chuỗi thành chữ thường. Xuất chuỗi ra màn hình.
Test 1
4I1K2D14Ti
4i1k2d14ti
Cho một số nguyên dương \(n\). (\(n\) có không quá \(255\) chữ số).
Yêu cầu: Hãy tìm số đảo ngược của \(n\).
Test 1
111111111122222222223333333333
333333333322222222221111111111
Cho một xâu kí tự, hãy kiểm tra tính đối xứng của nó. Một xâu kí tự được gọi là xâu đối xứng nếu ta đọc xâu này từ trái sang phải hoặc từ phải sang trái là như nhau.
Test 1
abccba
YES
Test 2
abcccc
NO
Trong bảng mã ASCII, \(26\) kí tự chữ cái thường từ ‘a’ đến ‘z’ được mã hóa tương ứng bằng các số tự nhiên từ \(97\) đến \(122\).
Cho một xâu kí tự \(S\) chỉ chứa toàn các kí tự chữ cái thường. Gọi \(P\) là xâu mã hóa tương ứng của xâu \(S\) bằng cách mã hóa từng ký tự trong \(S\) (theo bảng mã ASCII) và viết liên tiếp nhau. Ví dụ: \(S\) = ‘ab’ thì \(P\) = ‘9798’.
Hãy viết chương trình nhập vào từ bàn phím một xâu đã mã hóa \(P\) và in ra màn hình xâu kí tự \(S\).
Test 2
979899
abc
Test 3
1009711097110103
danang
Một xâu ký tự có thể nén lại thành một xâu mới bằng cách nén các ký tự giống nhau đứng cạnh nhau. Ví dụ trong xâu \(aaaa\) sẽ nén thành \(4a\). Hãy lập trình để nén một xâu ký tự thường theo cách trên.
Test 1
mmaabbbeeeezh
2m2a3b4ezh
Hãy viết chương trình thực hiện nhiệm vụ sau:
Nhập vào từ bàn phím một xâu kí tự \(S\), hãy in ra số kí tự chỉ xuất hiện đúng 1 lần trong xâu \(S\).
Test 1
abbacdmedc
2
Conan đang trong một vụ án cực kì hóc búa, đã có đến 2 vụ án mạng xảy ra. Tại hiện trường 2 vụ án đều để lại dòng chữ kì lạ. Có vẻ như đó chính là gợi ý mà hung thủ để lại. Hung thủ dường như đang cố thách thức vị thám tử lừng danh của chúng ta. Bằng tài năng suy luận tài tình của mình, Conan đã khám phá đã ra được gợi ý của hung thủ chính là sự tương đồng của 2 dòng chữ đó. Tuy nhiên các dòng chữ rất dài, Conan giỏi suy luận nhưng lại không giỏi lập trình. Bạn là một lập trình viên giỏi, bạn hãy giúp Conan nhé.
Yêu cầu: Cho 2 chuỗi kí tự \(a\) và \(b\). Hãy xác định xem chuỗi \(a\) và \(b\) giống nhau bao nhiêu kí tự?
Test 1
aaabb
baa
3
Cả 2 chuỗi đều có 2 kí tự a và 1 kí tự b. Vậy kết quả in ra 3.
Trong máy tính, để tiết kiệm bộ nhớ, người ta thường tìm cách nén dữ liệu. Trong việc nén văn bản, ta sư dụng một phương pháp đơn giản đươc mô tả thông qua ví dụ sau:
Ví dụ:
Với xâu ký tự: "aaaabbb" sẽ được nén lại thành xâu "4a3b". Với xâu ký tự "aaab" sẽ được nén lại thành "3ab".
Cho một xâu \(S\) gồm các ký tự thuộc tập \('a'...'z'\). Gọt \(St\) là xâu nén của xâu \(S\) theo phương pháp được mô tả như trên. Xâu \(St\) gồm \(N\) ký tự thuộc tập các ký tự \('a'...'z'\), \('0',...'9'\)
Hãy giải nén xâu \(St\) để được xâu gốc \(S\).
Test 1
2m2a3b4ezh
mmaabbbeeeezh