April 2, 2023
Dart で参加した時 TLE にならないようにするために
Dart で AtCoder ABC にチャレンジした際、アルゴリズム的には AC が受けられるはずなのに TLE の連続で苦戦させられた。結論としては以下のサイトに記載されていたが、インプットの受付方に工夫が必要だった。
どうやら stdin.readLineSync()
は入力行数が多い場合や、1行に大量の文字列が含まれている場合は遅く TLE にひっかかるようだ。私は後者のパターンで苦戦していたので助かった。
import 'dart:io';
import 'dart:convert';
void main() async {
int linelen = 2;
List<String> lines = [];
await for (String line
in stdin.transform(utf8.decoder).transform(LineSplitter())) {
lines.add(line);
if (lines.length == linelen) {
break;
}
}
int x = int.parse(lines[0].split(" ")[1]);
Set<int> a = lines[1].split(" ").map(int.parse).toSet();
...
}
上記のように stdin.transform(utf8.decoder).transform(LineSplitter())
を用いてストリーム処理を行うと良い。私もこれで AC がとれた。
以上。