Dart で AtCoder チャレンジする際の input の扱い

April 2, 2023

dart

atcoder

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 がとれた。

以上。