ABC234

結果

A  01 \ : 54

B  05 \ : 23

C  35 \ : 03

D  82 \ : 29

1WAの4完で,パフォは 746,rating変動は -10 848 \to 838でした.

考察

A問題

関数を宣言して問題に忠実に出力計算式を書けばACです.

見間違えに気を付ける.

B問題

 i個目の点(  1 \leq i \leq N )と j個目の点(  1 \leq j \leq N )で全探索をして,最大値を更新していきます.

このやり方だと,自分自身との距離とか,同じ点同士の距離計算を2回したりとか無駄が多いですが,面倒だし計算量的には変わらないのでこれでOK.

C問題

 Kを2進数で表し, 1 2で置き換えればACです.

0と2のみで構成される数字を小さい方から並べていくと,2進数で1ずつ加算していく計算をすることとほぼ同じことに気づけば簡単です.(私はすぐに気付きませんでしたが)

D問題

登場した数列を連想配列で保持しておきます.(大小関係を高速に保持したいため)

 Pの先頭 i項のうち, K番目に大きい連想配列の場所をitとします(iteratorの意味).初めに先頭 K項を連想配列に突っ込んでおくと,itの初期値は連想配列の先頭です.

順列の K+1番目以降はまずは連想配列に入れますが,それがitの値より大きければ K番目に大きい値は1つずれるので,itを1つ先に送ります.itの値より小さければ K番目に大きい値はそのままです.

感想

C問題で2ベキが絡みそうなことはすぐ気づけましたが,ACまではかなり時間がかかってしまったのが悔しいです.

D問題は凡ミスで20分無駄にしたのでもっと日々コードを書けという気持ちになりました....はい,書きます.