Tách lấy tên từ họ tên
Đề bài
Cho một xâu họ tên chuẩn: gồm các từ chỉ chứa chữ cái, hai từ liền nhau cách nhau đúng một dấu cách, không có dấu cách ở đầu và cuối xâu. Tên là từ cuối cùng của họ tên.
Hãy in ra tên.
Dữ liệu vào:
Một dòng là xâu họ tên chuẩn $S$.
Kết quả:
In ra phần tên.
Giới hạn:
- $1 \le |S| \le 1000$, $S$ có ít nhất một từ.
Giới hạn thời gian: 1 giây, bộ nhớ: 256 MB. Dữ liệu nhập từ bàn phím và in ra màn hình.
Le Thanh HuyHuyVo NamNam- Họ tên có thể có 2, 3, 4… từ; tên luôn là từ cuối cùng.
Nguồn: phỏng theo bài "TÁCH LẤY TÊN" – vinhdinhcoder.net (chủ đề Xâu kí tự).
Lời mở đầu
Họ tên người Việt có thể 2, 3, 4 hay 5 chữ, nhưng tên luôn là chữ cuối cùng. Vậy chỉ cần tìm dấu cách cuối cùng – tên là phần đứng sau nó. Ghi chú: đề gốc chỉ ghi "xâu họ tên không quá dài"; mình chốt độ dài không quá 1000 và cho phép họ tên chỉ có một từ (khi đó tên là cả xâu).
Bấm vào nút bên dưới để nộp bài và được hệ thống CLUE OJ chấm tự động.
Nộp bài trên CLUE OJLộ trình lời giải, bấm vào từng phần để nhảy tới:
Bộ testBộ test chính thức có gì?
Bộ test có 20 test, mỗi test đúng được 1 phần điểm như nhau. Có 20 test với họ tên từ 1 tới hơn 100 từ.
| Test | Nội dung kiểm tra |
|---|---|
| 1–2 | Ví dụ của đề (3 từ và 2 từ) |
| 3 | Chỉ có một từ |
| 4–5, 8, 14–16, 18–19 | Họ tên 4, 5, 6 từ hoặc hơn 100 từ – nghĩ "luôn có 3 từ" là sai |
| 6–7, 9–13, 17, 20 | Họ tên 2–3 từ, tên rất dài, họ ngắn… |
Ý tưởngLùi từ cuối xâu tới dấu cách gần nhất
Cho con trỏ p bắt đầu ở kí tự cuối cùng, lùi dần khi s[p] chưa phải dấu cách. Khi dừng, p là vị trí dấu cách cuối cùng (hoặc $-1$ nếu họ tên chỉ có một từ). Tên là xâu con bắt đầu từ p + 1: s.substr(p + 1).
getline(cin, s). Nếu dùng cin >> s thì chỉ đọc được họ.Em nhập họ tên rồi bấm Tiếp để xem con trỏ lùi từ cuối xâu:
Lời giảiMột vòng while lùi con trỏ
Chỉ cần một vòng while và hàm substr.
- Điều kiện
p >= 0đứng trướcs[p] != ' 'để không truy cậps[-1]khi họ tên chỉ có một từ. s.substr(k)trả về phần xâu từ vị tríktới hết; Python viếts[k:].- Có thể dùng sẵn
s.rfind(' ')(tìm dấu cách cuối cùng) – khi không có dấu cách nó trả về-1(thực ra lànpos, cộng 1 thành 0) nên vẫn đúng.
Kết quả chạy thật: bản C++ đúng 20/20 test, chạy lâu nhất 0.005s. Bản Python đúng 20/20 test, chạy lâu nhất 0.020s. Full điểm.
Cái bẫyNhững cách làm sai hay gặp
Các cách làm sai mình đã chấm thử trên bộ test:
| Cách làm sai | Đúng | Ghi chú |
|---|---|---|
Đọc bằng cin >> s | 1/20 | sai test 1, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 |
| Lấy phần sau dấu cách đầu tiên | 7/20 | sai test 1, 4, 5, 7, 8, 10, 12, 13, 14, 15, 16, 18, 19 |
Nghĩ họ tên luôn có 3 từ: cin >> a >> b >> c | 5/20 | sai test 2, 3, 4, 5, 6, 8, 9, 11, 14, 15, 16, 17, 18, 19, 20 |
Tổng kếtKết quả chạy thật trên bộ test
| Cách | Ngôn ngữ | Đúng | Lâu nhất | Ghi chú |
|---|---|---|---|---|
| Lời giải chuẩn | C++ | 20/20 | 0.005s | Full điểm |
| Python | 20/20 | 0.020s | Full điểm | |
| cin >> s | C++ | 1/20 | – | Mất 19 test |
| Sau dấu cách đầu | C++ | 7/20 | – | Mất 13 test |
| Luôn 3 từ | C++ | 5/20 | – | Mất 15 test |
- Không biết học gì trước, học gì sau, học lan man nên kiến thức bị hổng.
- Bí bài không ai gỡ, ngồi cả buổi vẫn không ra rồi bỏ cuộc.
- Code chạy được nhưng không đủ điểm, không biết sai ở đâu, chậm ở đâu.
- Không có đề thi thử và người chấm, nên không biết mình đang ở mức nào.
- Dễ nản giữa chừng khi không có ai theo sát.
- Lộ trình 111 buổi video sắp sẵn từ dòng code đầu tiên đến đề HSG thật của các tỉnh.
- Thầy trực tiếp gỡ bí, chữa bài cho từng em qua nhóm Zalo riêng.
- Hệ thống chấm bài tự động 24/7 và thi thử HSG hằng tuần để biết chính xác mình đang ở đâu.
- Đóng học phí một lần, thầy kèm lâu dài: từ thi chuyên Tin đến HSG quốc gia và cả khi lên đại học.
Nhận xét
Đăng nhận xét