0.はじめに
ARCとメールを読み違えて日曜開催と勘違いしてしまって
ABCに参加できなかった今日この頃。
とりあえずバーチャル参加をしてみました。
A~C問題までは順調に正答しましたが、Dはとても無理な気がし
Eをやってみましたが結局分からず終了。
レート変動はありませんでしたが、順位的には2840位相当の
成績でした。ちゃんと参加できていれば・・・。
1. A - Permute to Maximize
3つの数字で大きい数字を作る問題。
数字を文字としてリストで読み込み、降順ソートし
くっつけて出力して終了。
https://atcoder.jp/contests/abc432/submissions/71008501
2.B - Permute to Minimize
A問題の発展問題?
まぁB問題なので、効率気にせず回答。
インプットをリストに入れ、小さい順にソート。
先頭の文字が0以外ならそのままくっつけて出力。
0だったら、0以外の文字で最小の数字を調べ
その文字を先頭にもってきてリストをくっつけて出力して終了。
https://atcoder.jp/contests/abc432/submissions/71008667
3.C - Candy Tribulation
大きい飴を最大化ということなので、それを軸に考察。
【考え方】
・重さが同じで、総個数を変える事を考えると、大きい飴を小さい飴に変えることで
その重さの差分で調整することとなる。
・大きい飴をMAXにするためには、一番個数が少ない人の飴をすべて大きな飴にし
個数昇順で、個数の差分を元に大きい飴を小さい飴に変更して調整していく。
【実装】
1.N,X,YおよびリストAを入力
2.Aを昇順ソート
3.変数MinS(ある人が持つ飴総数の最小値)にA[0]をセット
4.変数W(各人の持つ飴の重さ合計)にMinS×Y(すべて大きい飴を渡す)をセット
5.変数YS(大きい飴の総数)にMinSをセット
6.変数sa(飴の重さの差)にX-Yをセット
(ここまでで飴総数最小の人の初期処理終了)
7.以下、iを1~N-1まで変更し、飴総数最小から2人目~N人目を処理
1.S(i番目の人の飴総数)にA[i]をセット
2.pre(前計算変数)にWからS*Yを引いた値をセット
3.preをsaで割り切れる、かつ、preをsaでわった値がS以下(S以上となると渡す数をオーバーする)の時
1.x(小さい飴を渡す数)にpre÷saをセット
2.YSにS-xをセット
4.3の条件を満たさない時は-1を出力して終了
8.YSを出力して終了
考え方に問題が無かったようで、上記実装でACとなりました。
https://atcoder.jp/contests/abc432/submissions/71010012
以上