gyouzasushi’s diary

競プロとか

今日の競プロ(2020/5/2) + AtCoder Beginner Contest 165

AtCoder : 1705 → 1755 (+50)

ABC165 A - We Love Golf

問題

こういうのは変に算数せず、全探索

提出

ABC165 B - 1%

問題

最大ケースがサンプルにあって優しい。C++でやったらオーバーフローしてもうたからPythonでやった。

提出

ABC165 C - Many Requirements

問題

何言ってるかよくわからないけど、とりあえず A が全探索できればよさそう。A として考えられる数列は、M 個のボールと N-1 個の仕切りの並べ替えと考えて {}_{N+M-1} C_{N-1} 通り。これは最大でも {}_{19} C_{9}=92,378 なので、いける。

実装も同じように、 M 個のボールと N-1 個の仕切り(に見立てたM 個の 0N-1 個の 1)をstd::next_permutationで回せばいける。

提出

ABC165 D - Floor Function

問題 

xB で割って x=qB+r とすると、

\begin{eqnarray} \lfloor \frac{Ax}{B} \rfloor - A \times \lfloor \frac{x}{B} \rfloor &=& \lfloor \frac{A(qB+r)}{B} \rfloor - A \times \lfloor \frac{qB+r}{B} \rfloor \\ &=& (Aq+\lfloor \frac{Ar}{B} \rfloor) - (Aq + \lfloor \frac{r}{B} \rfloor) \\ &=&  \lfloor \frac{Ar}{B} \rfloor -\lfloor \frac{r}{B} \rfloor \end{eqnarray}

r \lt B だから \lfloor \frac{r}{B} \rfloor=0で、結局

 \lfloor \frac{Ax}{B} \rfloor - A \times \lfloor \frac{x}{B} \rfloor=\lfloor \frac{Ar}{B} \rfloor

これは単調非減少なので、できるだけ大きい r\lt B をとればOK。

めっちゃ時間かけてもうた、割り算苦手すぎ。小学三年生の算数の授業でどれだけ苦労したことか…。

提出

ABC165 E - Rotation Matching

問題

パズル。

f:id:gyouzasushi:20200502235923p:plain

こうやるとM 個の対戦場に書かれた数字の差が全て異なるようになるので、同じ人と当たることもなくなる。

提出

ABC165 F - LIS on Tree

問題

DFSの順番で普通のLISと同じようにやればいける。DP配列を更新するときに更新前の値をメモしておいて、子から親に帰るときにDP配列の値を元に戻す。

提出