AtCoder Beginner Contest 226 (ABC226) に参加して, ABCDE5完 922位でした.冷えました.
A - Round decimals
難しかったです.
string s; cin >> s;
cout << (stoi(s.substr(0, s.size() - 4)) * 1000 + stoi(s.substr(s.size() - 3) + 500) / 1000 << endl;
B - Counting Arrays
vector<vector<int>> vec;
に読み込んでおいて,sort して unique して erase して size をとりました.
C - Martial artist
技aが技bの前提になっているとき,bからaに辺がある有向グラフを考えて, 技N からたどれる技全部について 時間を加えれば良いです.
D - Teleportation
$T := \{(i, j) \mid 1 \leq i < j \leq N\}$ として, $(a,b), (c,d) \in T$ に対し, 「$(x_b - x_a, y_b - y_a)$ と $(x_d - x_c, y_d - y_c)$ が平行である」 という同値関係を$T$に入れた時,同値類の数の2倍が求める答です.
$T$を $(x_b - x_a, y_b - y_a)$ の偏角でソートして,隣り合う要素が 異なるところの数を数えれば同値類の数がわかります.
しょうもないミスで1WA.
E - Just one
題意を満たす向き付けができるための必要十分条件は,各連結成分について, 辺の数と頂点の数が等しいことです. 必要条件であることはあきらかです. 十分性: 連結成分のグラフは全域木と1本の辺からなります. その辺の両端をA, B として,全域木の根を A と見た時に, 子から親へ向き付け,最後に A → B の向きを付ければ,題意を満たします.
このとき,各連結成分上で,1つだけあるループの向きだけの自由度がありますから, 求める答は,2の連結成分数乗です.
必要十分条件を理解するまでいろいろ迷走して 2WA.
F - Score of Permutations
時間が足りず,コードを書いている途中で時間切れになりました.
順列$P$を決めた時のスコアは,$P$を巡回置換の積で表した時, 各巡回置換の長さの最小公倍数になります.
dp[n][e] := 1, 2, …, n の順列で,スコアが e であるものの数
とします.
1, .., n の順列のうち, n を含む巡回置換の長さが k であるものを数えます. まず,1, 2, …, n - 1 から k - 1 個をえらびます. 選んだものと n からなる k 個の巡回置換の数は $(k - 1)!$ ですから, このようなものは $\binom{n-1}{k-1} (k-1)!$ 個あります. 残り $n - k$ 個の並び替えのスコアが e だとすると,この順列の スコアは LCM(e, k) になりますから,
$\textrm{dp}[n][\textrm{LCM}(e, k)] \;+\!=\; \textrm{dp}[n - k][e] \times \binom{n-1}{k-1} \times (k-1)!$
という遷移が書けます.データはmap で持ちます.
求める答は $\sum_{e} e^K (\textrm{dp}[N][e])$ で, $K$乗を $O(\log K)$ で実行すれば間に合います.
冷えてhighest-100を割り込みました.まあまた良い時も来るでしょう.
— yamate11 (@_yamate11) November 7, 2021
yamate11さんのAtCoder Beginner Contest 226での成績:922位
パフォーマンス:1488相当
レーティング:1894→1859 (-35) :(#AtCoder #ABC226 https://t.co/uBE53UiuSM