3 câu thần chú giúp chương trình chạy nhanh hơn?

Vũ Giang 2021-12-19 14:15:30 2021-12-19 14:26:23

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 :'(

2. Time Limit Exceeded chỉ vì không có 3 lệnh kia

3. Một bài tập khác

4. Một bài tập khác nữa

Tổng cộng 4 trả lời

Nguyễn Hoàng Sơn

Thực ra không cần cout.tie(NULL) vì cout được mặc định gắn với null rồi

Vũ Giang

Vâng em hiểu rồi, cảm ơn anh nhiều ạ.

Trùm CUỐI

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é.

Trùm CUỐI

Có thể giải thích đơn giản thế này bạn nhé:

ios_base::sync_with_stdio(false);

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.

cin.tie(NULL);
cout.tie(NULL);

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).