祭囃子は遠く、

理系大学生のハッピーエヴリディを書いていきます。

某での某某某

僕は怒っています。
就活のコーディングテストでよく使われる某某サイトの入力がゴミウンチ以下だからです。
普段競プロでしかほとんどプログラミングしなかったり、あんまり文字列扱わなかったりすると変な入力が来たらウンチを漏らしてしまうものです。

そこで某の注意点を少しだけまとめます。
主にc++想定です。Pythonも触れるかも。(あんまり触れませんでした)

言語が途中で変えられない

見ての通りです。しかしオンラインジャッジということもありTLE(時間オーバー)はあります。
問題をみて言語変えられないのは僕的に辛い。
某社のテストの時は、pythonを選んでしまいめちゃくちゃ最適化したものの、もう原理的に時間内に終わらないやろってレベルで無理でした。

結論
C、C++は正義、速度はパワー
でも難しい処理を普段Pythonに任せていると辛いものがある。

入力がcharだしクソ(僕が受けた範囲では)

これ僕のような人間からしたら面食らいます。(競プロの標準入力は優しい)
数字をどうこうしようってアルゴリズムを組めと言われたので、入力が数字だと思い込んで実装した後に気付く・・・ということもありました。
Pythonであればテキトーにやるだけで変換できるので特に問題はありません。
しかし、改行のエスケープ文字とかが文末に入っててややこしいことになったりします。(入力に含まれるのでそのままforとかで回すと色々やばい)
正直こんなことで頭を使いたくないのでcharで受け取ってintにキャストするやつを置いておきます。(テスト中に焦りながら調べた)

#include <stdlib.h> /* strtol */
#include <limits.h> /* INT_MAX, INT_MAX */

int main(){
char *endp;
char *str;
long r;

r = strtol(input, &endptr, 10);

if (input == endptr) {
   //文字列の処理;
}

if (r > INT_MAX || r < INT_MIN) {
   //オーバーフローの処理;
}

int val = (int)r; //intにキャスト
}

inputが標準入力で最終的にはvalが得たい値です。
atoiは??と思うかもしれませんが、あれは文字列をかますと0を返すはずなので入力が0の場合と分解できません。
後エラー時の挙動が環境で違うとかで危ないらしい。

少なくとも上のソースで僕は通したことがあるので大丈夫なはず。

感想を書かせてくる

これもわりとありがちなんですよね。
書かすのはいいんですよ、書かすのは。
ただ実装でカツカツのレベルの問題にぶち当たった時がクソ

「やべっ、時間足りない〜〜〜」

って時にあっ、感想(実装の注意点とか苦労した点とか書かせてくる)書かなきゃとなるわけです。
まぁこれに関しては初見でもどうにかできるとは思いますが、最初から計画を立てて置いたほうが良さそうですね。
事前説明にも多分書いてあるけど

終わりに

とまぁここまで書きましたが僕はもうこれといって頑張る必要もないのでみなさん頑張ってください。