この記事は Competitive Programming (1) Advent Calendar 2020 の 13 日目の記事として書かれました。
以下のツイートから着想を得たネタで書いています。完全にポエムなのでご了承ください。
続きを読む「純粋培養競技プログラマが就職して1年」みたいなブログがよみたい。どんなことを身に着けて何が出来るようになったかみたいな。
— chokudai(高橋 直大)🍆 (@chokudai) 2020年10月28日
この記事は Competitive Programming (1) Advent Calendar 2020 の 13 日目の記事として書かれました。
以下のツイートから着想を得たネタで書いています。完全にポエムなのでご了承ください。
続きを読む「純粋培養競技プログラマが就職して1年」みたいなブログがよみたい。どんなことを身に着けて何が出来るようになったかみたいな。
— chokudai(高橋 直大)🍆 (@chokudai) 2020年10月28日
このツール使ってる人なら既にやってるひと多そうだけど一応
Online Judge Template Generator で普通にテンプレートを出力させると std::endl
を利用したものが出力されるが、こどふぉ等で出力 TLE になる可能性があるのでできれば使用を避けたい。
printf
を使用するようなオプションもあるが _get_base_type_format_specifier の実装を見ると、string
型に対応していないことが分かる。真面目にテンプレを書けば対処はできるがちょっとめんどくさい。
以上を踏まえてちょっと妥協した感じの対処法を書きます。
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 に対応させることも可能だと思います。やりたい人はやるとよいです。
9/14〜9/16 に HUPC2020 が開催され、9/14 は 北大セット でした。元々は RUPC2020 の北大セットとして出す予定だったので自分もまだ作問に携わっていて、今回で大学合宿の作問は卒業ということになりました。思い返してみれば、RUPC2017 からセット提供するごとに毎回作問しているのでなんだかんだ 3 年半くらい関わったことになります (しかも HUPC 主催で作問機会を自ら増やしているという・・・)。そう考えるとなんとなく結構やったのかもという気持ちになりますね。
今回もセットを作るにあたって相当いろいろやったので、振り返ってみます (なんかこういうのやりたくなっちゃうんですよね、半分ポエムだけど許してください)
続きを読む