Cho mình hỏi là 3 lệnh dưới đây là gì, và tại sao khi sử dụng nó lại giúp cho chương trình chạy nhanh hơn một chút. Xin cản ơn ạ.
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
Cụ thể là khi mình nộp bài 530 hai lần chỉ khác là có hoặc không 3 lệnh kia mà không ngờ thời gian chạy lại chênh lệch lớn như thế. Mình có gặp trường hợp bị Time Limit Exceeded chỉ vì không có 3 lệnh kia nên trước giờ toàn dùng theo bản năng mà không hiểu sao lại thế nhỉ .-.
Dưới đây là vài ví dụ bài nộp của mình :
1. Chênh lệch hơn 1,5 giây :'(
- Có sử dụng (561 ms).
- Không sử dụng (2089 ms).
2. Time Limit Exceeded chỉ vì không có 3 lệnh kia
- Có sử dụng (1989 ms).
- Không sử dụng (8595 ms).
3. Một bài tập khác
- Có sử dụng (177 ms).
- Không sử dụng (679 ms).
4. Một bài tập khác nữa
- Có sử dụng (261 ms).
- Không sử dụng (765 ms).
Tổng cộng 4 trả lời
Thực ra không cần cout.tie(NULL) vì cout được mặc định gắn với null rồi
Vâng em hiểu rồi, cảm ơn anh nhiều ạ.
Cần chú ý là những lệnh này chỉ giúp việc nhập xuất (bằng cin/cout) được nhanh hơn, không có tác dụng giúp thuật toán chạy nhanh hơn nhé.
Nếu khi bàn dùng cách nhập/xuất của C (scanf, printf) thì không cần các dòng "thần chú" này nhé.
Có thể giải thích đơn giản thế này bạn nhé:
Lệnh này với tham số là
false
sẽ tắt sự đồng bộ giữa cin/cout với stdin/stdout (vì lí do lịch sử, có thể người dùng sẽ dùng sen kẽ giữa cách nhập xuất của C++ với C nên cần phải đồng bộ), việc này sẽ giúp việc nhập/xuất được nhanh hơn.Lệnh này có tác dụng ngăn chặn sự đồng bộ giữa cin với cout (như khi chúng ta muốn tương tác giữa người dùng với chương trình, mỗi lệnh nhập dữ liệu cần ghi ra một dòng thông báo).