このツール使ってる人なら既にやってるひと多そうだけど一応
概要
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 に対応させることも可能だと思います。やりたい人はやるとよいです。