Hướng dẫn làm dạng bài Interactive
Hướng dẫn
Đối với dạng bài tập này, dữ liệu đầu vào từ chương trình có thể không được xác định trước nhưng được sinh đặc biệt cho bài làm của bạn. Khi chấm bài, trình chấm sẽ sử dụng một chương trình đặc biệt - Interactor - để chuyển dữ liệu đầu ra tới đầu vào của chương trình do bạn cung cấp, và tiếp tục lấy dữ liệu đầu ra từ chương trình của bạn chuyển vào đầu vào của Interactor. Nói cách khác, bài làm của bạn và Interactor sẽ trao đổi dữ liệu cho nhau và lựa chọn in ra những gì được lấy từ "lịch sử trao đổi".
Khi bạn viết lời giải cho dạng bài Interactive, điều quan trọng nhất mà bạn phải nhớ chính là: nếu bạn xuất dữ liệu ra đầu ra, có khả năng các dữ liệu đó sẽ được đưa vào bộ nhớ đệm nội bộ (Internal buffer) và không được truyền trực tiếp tới Interactor. Để tránh xảy ra hiện tượng này, chúng ta sẽ sử dụng một lệnh đặc biệt flush bất cứ khi nào bạn in ra một cái gì đó.
Cách để flush trong stdout
Lệnh flush này được đi kèm trong thư viện chuẩn của hầu hết các ngôn ngữ lập trình. Ví dụ:
- Đối với C++, bạn có thể dùng
fflush(stdout)hoặccout << flush.- (phụ thuộc vào cách bạn nhập xuất dữ liệu - bằng
scanf/printfhoặccout). endlsẽ thực hiệnflushmột cách tự động.
- (phụ thuộc vào cách bạn nhập xuất dữ liệu - bằng
- Trong Java, bạn có thể dùng lệnh
flushbằngSystem.out.flush() - Trong Python, ta có thể dùng
stdout.flush(). - Trong Pascal, chúng ta có
flush(output).
Ghi chú, Lưu ý
Có một số ghi chú đối với dạng bài Interactive:
- Đầu vào/ra trong các bài tập dạng Interactive thường chậm hơn khá nhiều so với các bài tập thông thường - nên sử dụng
scanf/printfthay vìcin/coutđối với C++. - Thông thường, việc tự chấm thử bài làm đối với các bài tập dạng Interactive thường sẽ phức tạp hơn nhiều, bởi thí sinh sẽ phải đóng vai trò là Interactor trong quá trình chấm thử.
- Như đã đề cập ở trên, trong C++,
endlsẽ thực hiệnflushmột cách tự động.
Bài tập mẫu
- VNOJ // guessthenumber - Đoán số Interactive
- TomChienXuOJ // baron25_guessthenumber_py - Baron 25 - Đoán số (Python Checker)
- TomChienXuOJ // baron25_guessthenumber - Baron 25 - Đoán số (CPP Checker)
- TomChienXuOJ // tcpp24_hlny_interactive_maze - Mê Cung (Maze)
- TomChienXuOJ // tcpp23_yearend_rps - Rock Paper Scissors
Tìm hiểu thêm
Xem thêm về Interactive Problems ở: