読者です 読者をやめる 読者になる 読者になる

naoya_t@hatenablog

いわゆるチラシノウラであります

コードテンプレート加筆 + TZTesterの文言変更

assert() を使おう

SRMがドジっ子アピールの場となっている現状を打破すべく

#define NDEBUG
$BEGINCUTS
#undef NDEBUG
$ENDCUTS
#include <cassert>

を追加。
全体だとこんな感じ→ https://gist.github.com/naoyat/5821991

これでローカルテストの時だけassert()が使える。こんな感じ。

typedef long long ll;

...

bool f(ll x) {
  ...
}

ll lo = 1LL, hi = LONG_LONG_MAX;
int z = 0;
while (true) {
  // lo:x hi:o
  assert(lo < hi);
  assert(0 <= lo);
  assert(!f(lo));
  assert(f(hi));
  if (lo+1 == hi) {
    return hi;
  }
  ll mi = (lo + hi)/2;
  if (f(mi)) hi = mi;
  else        lo = mi;
  assert(mi >= 0);
}

TZTester文言変更:Expected/Received を Expected/Your answer に変えてみる

SRM583 Div2 Easy "SwappingDigits" より。わざと間違えてます。

Test Case #0...PASSED (0.024 msec)
Test Case #1...PASSED (0.009 msec)
Test Case #2...PASSED (0.006 msec)
Test Case #3...FAILED (0.004 msec)
	   Expected: "10234"
	Your answer: "01234"
Test Case #4...FAILED (0.006 msec)
	   Expected: "13218910471211292496"
	Your answer: "03218919471211292416"
Test Case #5...FAILED (0.006 msec)
	   Expected: "10720376171328422763213753122612211005355347513"
	Your answer: "01720376171328422763213753122612211005355347513"

これでテスト失敗時の視認率が上がるかも。
https://github.com/naoyat/TZTester
↑他にも魔改造が施されているので、ご利用は計画的に&自己責任で!