ProblemF悔しすぎる・・・

そんなこんなで他人のコードを見た後、うちらは何を間違えたのかなぁと思って自分たちのコードを読み直すと、最初の木の同形判定をするためのオペレータ部分

bool treeless(const Tree* lhs, const Tree* rhs)
{
    if (lhs == NULL && rhs == NULL) return false;
    if (lhs == NULL && rhs != NULL) return true;
    if (lhs != NULL && rhs == NULL) return false;

    bool b = treeless(lhs->cmpleft, rhs->cmpleft);
    if (!(b && treeless(rhs->cmpleft, lhs->cmpleft))) return b;
    return treeless(rhs->cmpright, lhs->cmpright);
}

での!=の条件に

    if (!(b && treeless(rhs->cmpleft, lhs->cmpleft))) return b;

という怪しいコードを発見!

    if (lhs == NULL && rhs == NULL) return false;

とtrueじゃなくてfalseだから、!=の条件は普通に

    if (b != treeless(rhs->cmpleft, lhs->cmpleft)) return b;

と書かなきゃいけないし、あんなコードにする必要もないはず。


と思ってコンパイルして通してみたら、通った!!


あ、一行書き換えただけで通ったんですか・・・。
後10分あれば通せたかもって書いたけど、3分あればよかった・・・。


ほんと、今回は細かいミスに泣かされた大会だった・・・。


まぁこれも実力なんで、今後はこういうくだらないミスをしないようにコード書きなれようと思います。