競技プログラミング用 知識集積所
入出力高速化
最終更新:
Bot(ページ名リンク)
-
view
雑な説明
cinとcoutの動作を高速化する方法。
ただし、高速化による影響は小さく、一方で使用するリスクもある。
そのため、メリットよりデメリットの方が大きい気もするし、そもそも知らなくてもあまり問題ない気もする。
ただし、高速化による影響は小さく、一方で使用するリスクもある。
そのため、メリットよりデメリットの方が大きい気もするし、そもそも知らなくてもあまり問題ない気もする。
入出力同期の解除(C問題レベル)
最初に以下の2行を記述する。
ios::sync_with_stdio(false); std::cin.tie(nullptr);
cinやcoutのときに、他の入出力が待ち状態でないか確認しなくなる。
そのため、これらの実行が高速化され、TLE対策になる。
……が、よほど入出力が多くない限り、競プロ的には誤差レベル。
そのため、これらの実行が高速化され、TLE対策になる。
……が、よほど入出力が多くない限り、競プロ的には誤差レベル。
注意点1
同期を切るということは、当然複数の方法での入出力を行うと盛大にバグり散らかす。
入出力にcinとcout以外は絶対に使わないようにしなければならない。
入出力にcinとcout以外は絶対に使わないようにしなければならない。
注意点2(E問題レベル、AHC)
インタラクティブ問題の場合、同期を切ると出力と入力の動作順序が狂い、動作停止する場合がある。
"\n"の使用(C問題レベル)
cout << endl;
よりも
cout << "\n";
の方が圧倒的に速く、TLE対策になる。
endlのように毎回丁寧に出力するのではなく、出力予定内容に一時保管だけしておき後でまとめて出力するため。
endlのように毎回丁寧に出力するのではなく、出力予定内容に一時保管だけしておき後でまとめて出力するため。
注意点1
バグが発生した場合に、coutが出力予定内容に情報を抱えたまま実際の出力をせずに実行終了になる。
そのため、「出力を見ることでどこまで実行されたか判断する」と不具合発生位置を見誤る。
REが発生した場合のバグ修正時にハマらないように。
そのため、「出力を見ることでどこまで実行されたか判断する」と不具合発生位置を見誤る。
REが発生した場合のバグ修正時にハマらないように。
注意点2(E問題レベル、AHC)
インタラクティブ問題の場合、"\n"を使うと出力が一時保留されたままになり、動作停止する場合がある。