3完
各問題
A - Leftrightarrow
文字列の左端が <
、右端が >
、中がすべて =
であることを確認すればよいです。
B - Integer Division Returns
c++ では整数型の割り算 N / M
は切り捨てになりますが、(N + M - 1) / M
とすることで切り上げた結果を得ることができます。
というわけで X が非負の場合 (X + 10 - 1) / 10
とすればよいです。X が負の時は切りあがる方向の問題で同様の方法が使えませんが、実は単に X / 10
がほしい答です。
C - One Time Swap
それぞれの文字の個数を数えて、25 * 25 通り掛け算をして足し合わせれば、異なった文字を入れ替えたときの組み合わせの数が求められます。
もし、同じ文字が文字列中に複数個ある場合は同じ文字を入れ替えて S と同じ文字列を得ることができるので、上記の数に 1 を加える必要があります。
D - Tiling
回転も含めて最大 14 個中の 7 個を選び(もちろん同じものの回転形は重複して選ばないように注意して)、それを並び替えすると全探索になりますが、組み合わせの数が多すぎて間に合わず。
公式解説を見ると全探索で方針としては間違っていないようなのですが、探し方の効率が悪すぎた?
まとめ
D が解ききれず。C までが割と速かったのでかろうじて水色復帰はしたもののすっきりしない。