Skip to content

Instantly share code, notes, and snippets.

@iwkjosec
Last active July 26, 2023 15:14
Show Gist options
  • Save iwkjosec/5bac0501241c59580775430dfd490ab7 to your computer and use it in GitHub Desktop.
Save iwkjosec/5bac0501241c59580775430dfd490ab7 to your computer and use it in GitHub Desktop.

入出力がネックになる場合
メインロジックの7倍以上重い

ARC033 C - データ構造


ナイーブ 876 ms #5941704

var TX = ReadLine().Split().Select(int.Parse).ToArray();
var T = TX[0];
var X = TX[1];

いや、C/C++の速い提出は60 ms切ってるけど・・・ 10^5入出力だからそこが遅そう

AutoFlushを切る 327 ms #5941729

SetOut(new System.IO.StreamWriter(OpenStandardOutput()) { AutoFlush = false });
//...
Out.Flush();

AutoFlush = trueの10^5出力はfalseより500 ms遅い。ほかの問題でもそう
入力はLINQとToArrayが遅そう

SelectToArrayをやめる 229 ms #5941784

var TX = ReadLine().Split();
var X = int.Parse(TX[1]);
if (TX[0] == "1")

Splitも配列生成してるが

Splitをやめる 185 ms #5941872

var TX = ReadLine();
var X = int.Parse(TX.Substring(2));
if (TX[0] == '1')

Substringstringの新しいインスタンスを生成してる。
AsSpanできねぇ

.NETの標準ライブラリ 、内部で例外の変数チェックとか多重のメソッド呼び出しとかいっぱいあって、自分で書いた方が速いのでは

自前IO 103 ms #8097556

public static class FastIO
{
...

ストリームの管理とかパースとかを自分でやる


入出力の改善で 870 ms -> 100 ms

実質 80 ms だから C/C++ に追いついたか

自前出力は面倒なのでAutoFlush切るだけで十分

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment