hogecoder

tsutaj 競技プログラミングの記録

純粋培養競技プログラマが社会に出てみた感想

この記事は Competitive Programming (1) Advent Calendar 2020 の 13 日目の記事として書かれました。

以下のツイートから着想を得たネタで書いています。完全にポエムなのでご了承ください。

続きを読む

Online Judge Template Generator で std::endl を使わないようにする

このツール使ってる人なら既にやってるひと多そうだけど一応

概要

Online Judge Template Generator で普通にテンプレートを出力させると std::endl を利用したものが出力されるが、こどふぉ等で出力 TLE になる可能性があるのでできれば使用を避けたい。

printf を使用するようなオプションもあるが _get_base_type_format_specifier の実装を見ると、string 型に対応していないことが分かる。真面目にテンプレを書けば対処はできるがちょっとめんどくさい。

以上を踏まえてちょっと妥協した感じの対処法を書きます。

TL; DR

  • std::endl ではなく const char newl = '\n'; を使う
  • 出力方法を自分で定義したテンプレートを使うようにする

ちなみに newl という命名は beet さんのテンプレをリスペクトしています。

テンプレ

テンプレの冒頭にこれを書くと std::endl ではなく newl が出るようになる。(私は using namespace std; する人なので、それ用の設定も混じっていますが、適宜変えてください)

<%!
    import onlinejudge_template.generator.cplusplus as cplusplus
    import onlinejudge_template.generator.about as about
    from typing import List
    def newl_output(exprs: List[str], *, newline: bool) -> List[str]:
        items = ["cout"]
        for i, (expr, _) in enumerate(exprs):
            if i: items.append("' '")
            items.append(expr)
        if newline:
            items.append("newl")
        return [" << ".join(items) + ";"]
%>\
<%
    data['config']['printer'] = newl_output
    data['config']['using_namespace_std'] = True
%>\

get_base_type_format_specifier に準ずるものを自分で書けば、scanf, printf に対応させることも可能だと思います。やりたい人はやるとよいです。

大学合宿の作問を卒業した & HUPC2020 Day1 の講評とか

9/14〜9/16 に HUPC2020 が開催され、9/14 は 北大セット でした。元々は RUPC2020 の北大セットとして出す予定だったので自分もまだ作問に携わっていて、今回で大学合宿の作問は卒業ということになりました。思い返してみれば、RUPC2017 からセット提供するごとに毎回作問しているのでなんだかんだ 3 年半くらい関わったことになります (しかも HUPC 主催で作問機会を自ら増やしているという・・・)。そう考えるとなんとなく結構やったのかもという気持ちになりますね。

今回もセットを作るにあたって相当いろいろやったので、振り返ってみます (なんかこういうのやりたくなっちゃうんですよね、半分ポエムだけど許してください)

続きを読む