Clue Contest 08 - Còn lại gì sau cơn mưa?
Xem dạng PDFĐây là bài toán tương tác.
Dưới mái trường THPT chuyên C nọ, nhắc đến đội tuyển Tin học, không ai là không biết đến bộ đôi Dương và Huy. Khác biệt về cả tính cách lẫn phong cách gõ phím, nhưng họ lại là hai mảnh ghép hoàn hảo trên con đường chinh phục những thuật toán hóc búa nhất. Cùng với một người đồng đội nữa, cả hai đã viết nên lịch sử cho trường C khi mang về tấm huy chương Bạc ICPC National đầu tiên. Đó là một buổi sáng bùng nổ của cảm xúc, khi những dòng code chạy thâu đêm hôm nào cuối cùng cũng kết tinh thành quả ngọt, khẳng định vị thế của những cậu học trò trường C trên bản đồ lập trình thuật toán toàn quốc.
Thế nhưng, rũ bỏ ánh hào quang của những giải thưởng đồng đội, bước vào phòng đội tuyển, họ lại trở về làm những đối thủ "không đội trời chung". Bảng xếp hạng thi thử của trường chưa bao giờ có cơ hội đóng bụi ở vị trí top 1, bởi cái tên ngự trị trên đó liên tục được hoán đổi sau mỗi tối thứ Bảy. Dương và Huy cực kỳ nghiêm túc trong từng contest. Khoảng cách giữa họ thường chỉ được tính bằng một test case mỏng manh, hay một file code cầu may bị hệ thống trả về dòng chữ "Wrong Answer on test 4" đầy nghiệt ngã.
Cuộc đua tranh ấy không chỉ dừng lại ở tốc độ, mà còn là một màn đấu trí thuật toán đỉnh cao. Nếu Dương vừa hoàn thiện một cấu trúc dữ liệu hạng nặng, Huy sẽ mỉm cười bung ra một bộ test "anti-hash" hay những corner cases cực đoan để bẻ gãy bạn mình. Ngược lại, Dương cũng chẳng ngần ngại giăng ra những cái bẫy về tràn số hay bộ nhớ để ép Huy phải tối ưu thuật toán đến từng byte cuối cùng. Họ triệt hạ những sai lầm của nhau không khoan nhượng, không phải vì sự đố kỵ, mà vì họ ngầm hiểu với nhau một nguyên lý bất diệt của giới CP: thao trường đổ mồ hôi, chiến trường thi thật bớt rơi nước mắt.
Và rồi, ngày tàn khốc nhất cũng đến — kỳ thi Học sinh giỏi Quốc gia môn Tin học. Bầu không khí căng thẳng bao trùm, chỉ còn lại tiếng lạch cạch của bàn phím vang lên khô khốc. Cả hai đã chiến đấu với tất cả những gì mình có, vắt kiệt những ý tưởng tối ưu nhất. Bảng điểm công bố, cả trường C vỡ òa khi cả Dương và Huy đều xuất sắc giành Giải Nhì Quốc gia. Thế nhưng, ranh giới của vòng chọn đội tuyển Quốc tế lại quá đỗi khắc nghiệt. Nhờ một chút cẩn trọng hơn ở những test case cuối cùng — thứ mà cậu đã học được từ chính những lần bị Dương "bắt bài" trong phòng máy — Huy đã lách qua khe cửa hẹp, chính thức cầm trên tay tấm vé bước tiếp vào TST. Dương, dù tiếc nuối, đành gác lại giấc mơ vươn ra biển lớn năm ấy.
Chiều hôm đó, ánh nắng xiên ngang qua cửa sổ phòng máy quen thuộc. Không có những giọt nước mắt bi lụy, Dương chỉ vỗ vai Huy, một cái vỗ vai trao gửi cả những kỳ vọng dang dở. Kỳ thi Học sinh giỏi Quốc gia có thể đã khép lại, nhưng hành trình của họ thì chưa. Dù ai đi tiếp, ai dừng lại, cả hai đều biết rằng họ đã ghi danh thành công vào ngôi trường Đại học H danh giá. Ở đó, những bảng xếp hạng khốc liệt hơn, những thuật toán huyền bí hơn và cả một đấu trường ICPC sinh viên rộng lớn đang vẫy gọi. Bóng dáng hai người bạn thân lại bước đi song hành, sẵn sàng cho một chương mới, nơi họ sẽ không còn là đối thủ, mà mãi mãi là những người đồng đội ăn ý nhất.
Gác lại mọi bài vở, mọi thuật toán, họ lại tiếp tục gặp nhau tại một quán ăn quen thuộc trước ngày thi TST. Góc quán nhỏ nằm lọt thỏm giữa những tiếng còi xe hối hả, nơi chiếc bàn inox đã nhẵn bóng những vệt xước – bởi nó là chứng nhân cho không biết bao nhiêu cuộc tranh luận nảy lửa về độ phức tạp hay cách cài đặt của hai cậu học trò. Hôm nay không có những tiếng gõ phím lạch cạch, chỉ có hai cốc trà đá, ~n~ viên kẹo được xếp ngay ngắn trên mặt bàn, và một xấp tài liệu dày cộm được Huy mang theo với vẻ mặt đăm chiêu.
Nhắc đến TST, hay Kỳ thi chọn đội tuyển Quốc tế, ai trong giới CP cũng hiểu đó là một đấu trường hoàn toàn khác biệt. Nó không chỉ đòi hỏi nền tảng thuật toán siêu việt mà còn đánh đố thí sinh bằng những format mang đậm phong cách IOI: Interactive, Communication, hay Output Only. Và trớ trêu thay, đây lại chính là "lãnh địa" của Dương. Trong khi Huy xuất sắc ở sự cẩn trọng và độ ổn định trong các bài truyền thống, thì Dương lại sở hữu một tư duy cực kỳ quái gở và linh hoạt. Cậu là bậc thầy trong việc "lừa" grader, một kẻ săn điểm lẻ bằng các thuật toán Heuristic, và có một giác quan thứ sáu để tối ưu số lần truy vấn một cách đáng kinh ngạc.
Dù đã lỡ hẹn với tấm vé TST, Dương không mang trong mình nửa điểm chạnh lòng. Trên mặt bàn, cậu cẩn thận vẽ lại sơ đồ giao tiếp của một bài Communication lên chiếc iPad, kiên nhẫn giải thích cho thằng bạn thân từng tiểu tiết. Từ việc phải nhớ flush sau mỗi lần in kết quả để không dính lỗi Idleness limit exceeded, cho đến nghệ thuật phân bổ các bit chẵn lẻ để nén dữ liệu qua những hàm send() và receive().
"Mày nhớ nhé", Dương gõ nhẹ đuôi bút xuống bàn, giọng dứt khoát, "gặp bài Output Only thì đừng có húc đầu vào tìm thuật chuẩn ngay từ phút đầu. Cứ viết một cái Local Search thật mượt, chạy local lấy kết quả cắn subtask 1, subtask 2 đã rồi tính tiếp. Mày mà để trắng bài đó là tao nghỉ chơi với mày luôn đấy."
Huy im lặng lắng nghe, gật đầu ghi nhớ từng lời dặn dò. Trong ánh mắt của cậu không có sự kiêu hãnh của người chiến thắng vòng trước, cũng chẳng có sự ái ngại trước người bạn kém may mắn hơn mình. Huy biết, bước vào phòng máy TST ngày mai, cậu sẽ không chiến đấu một mình. Dương có thể không ngồi ở vị trí thí sinh, nhưng những chiến thuật "đào điểm" ma mãnh, những mẹo xử lý grader tinh quái của cậu sẽ hóa thành chiếc khiên vững chắc bảo vệ Huy trước những bộ test tàn nhẫn nhất. Bữa ăn kết thúc bằng một tiếng cụng ly giòn tan. Không cần những lời chúc sáo rỗng, chỉ có một cái gật đầu thật sâu và câu nói để lại của Dương trước khi quay xe: "Vào đó quậy tung cái server lên cho tao!"
Và đương nhiên, không còn gì tuyệt vời hơn kết thúc ngày ôn tập cuối cùng bằng một trò chơi trên những viên kẹo ấy ...
Trên bàn có ~n~ viên kẹo, ở mỗi lượt đi, người chơi được quyền bốc ~1, 2, 3, 4,~ hoặc ~5~ viên kẹo. Tuy nhiên, số kẹo bốc phải khác với số kẹo mà lượt đi liền trước nó đã được bốc. Người chơi nào không thể thực hiện lượt chơi của mình sẽ là người thua cuộc.
Bạn sẽ trong vai Huy, và bạn được quyền chọn đi trước hay đi sau. Hãy giúp Huy chiến thắng trò chơi này.
Tương tác
Đầu tiên, chương trình của bạn cần nhập số nguyên dương ~n~ (~1 \le n \le 1000~) từ đầu vào chuẩn.
Sau đó, chương trình của bạn cần in ra first hoặc second tương ứng bạn muốn đi trước hay đi sau.
Sau đó, trò chơi bắt đầu. Các lượt đi sẽ diễn ra luân phiên:
- Đến lượt bạn: Bạn cần in ra một số nguyên ~x~ (~1 \le x \le \min(5, \text{số kẹo còn lại})~) thể hiện số kẹo bạn muốn bốc. ~x~ phải khác với số kẹo mà đối thủ bốc ở ngay lượt trước đó (nếu có).
- Đến lượt máy chấm: Máy chấm sẽ in ra một số nguyên ~x~ tương tự như trên, hoặc ~-1~ nếu máy chấm nhận thua. Nếu máy chấm nhận thua, bạn cần kết thúc chương trình để nhận Kết quả đúng.
Nếu bạn nhận thua, bạn cần in ra ~-1~ và kết thúc chương trình.
Sau mỗi lần in dữ liệu, bạn cần flush dữ liệu để đảm bảo tương tác với máy chấm thành công.
Sample
| Chương trình | Máy chấm | Giải thích |
|---|---|---|
10 |
Trò chơi có ~10~ viên kẹo. | |
first |
Bạn chọn đi trước. | |
5 |
Bạn bốc ~5~ viên kẹo. | |
4 |
Máy chấm bốc ~4~ viên kẹo. | |
1 |
Bạn bốc ~1~ viên kẹo. | |
-1 |
Máy chấm nhận thua. Bạn cần kết thúc chương trình. |
Bình luận