l0w.dev

Codeforces Round #569 (Div. 2)


Codeforce Round #569 (Div. 2) に出場、またレーティングを大幅に減らす大事故が発生 (1784 → 1721)。もう免許を返上すべきか…。

自分でもよくわからない思い込みがあって問題 B を落としたのがショックが大きい。 数学の素養がまるでない、というか基礎のレベルであやしいと思う。

だいぶ時間を浪費した後に諦めて問題 C D をやり C だけ正答。 D は、あと 5 分あったら出せてたなあ。 B でつまづいてなければ ABCD 出せてたと思うと悲しいです。

寝て起きたあとに提出してみた問題 D で面白かったのは 初めて出力バッファリングの問題で TLE が出たこと (#55910106)。 test 6 は n=941, m=748 なので 70 万行程度の出力は 1 秒では出せないらしい。 改行を endl でなく '\n' に変えたら通った (#55910143)。 というか、これが pretest でなかったとしたらやっぱり問題 D はとれてなかったな。

入力のバッファリングで TLE するのはいままで何度も痛い目にあってきたので、 どの問題でも cin には対策を必ず入れるようにしていましたが、 出力でもなんかやらないとだめか。

個人的には改行を '\n' と書きたくないが #define endl '\n' するのもいやなので、 面倒だけど anonymous namespace で自分用 endl を定義するのがいいかなあと思いました。 ということで今後の C++ のテンプレはこんな感じかな。

#include <iostream>
#include <vector>
#include <algorithm>
#include <numeric>

using namespace std;

namespace {
        inline ostream &endl(ostream &os) {
                os.put('\n');
                return os;
        }
}

int main(int argc, char **argv)
{
        ios_base::sync_with_stdio(false);
        cin.tie(0);
        // ...
        return 0;
}