人工知能と競プロやってくブログ

深層学習・機械学習・AI・atcoder・競技プログラミングについて調べてやってみたことをまとめるブログです

AtCoder Beginner Contest 117 [ C - Streamline ]をPythonで解く(300点、🟫茶diff)

問題

atcoder.jp

解法

入力例1のデータを元に、具体的に考えてみます。

2 5
10 12 1 2 14

数列Xを、まずはソート。

1 2 10 12 14

このXiのとなりの値との差を計算する。
この数列をDとする。

1 8 2 2

ここまでの状態を図にしてみる。

f:id:uchidamax:20210702001936p:plain
ABC117_C

区間を表す数列Dは4個。 コマの数(N)は2個。
それぞれのコマが区間を2個、1個、都合3個移動すれば条件クリア。
つまり1個の区間は省くことができる。
移動しなければいけない区間数3は、N-Mで計算することができる。

移動量をもっとも少なくする問題なので、一番大きい区間を省くのが効率的。

ゆえにDをソート。

1 2 2 8

移動しなければいけない区間数3を頭から足していく。
1 + 2 + 2 = 5
答えは5となる。

実装

参考

blog.hamayanhamayan.com

youtu.be