アットウィキロゴ
競技プログラミング用 知識集積所
掲示板 掲示板 ページ検索 ページ検索 メニュー メニュー

競技プログラミング用 知識集積所

ABC438B - Substring 2

最終更新:

Bot(ページ名リンク)

- view
管理者のみ編集可


問題


必要知識

A問題レベルのものは省略

考え方

B問題で最小値を求めろと来たら、考えるべきは全探索※
SがN文字、TがM文字あるので、可能性がある候補はS内にN-M+1ヶ所ある。
そのそれぞれについて、「そこをTに合わせるには何回操作が必要か」を全て求め、最小値を答えればよい。

さて、「そこをTに合わせるには何回操作が必要か」は、今度は「その場合の各桁ごとの必要操作数」を求めて合計すればいい。
これは、Sの該当位置の数とTの該当位置の数を見比べればよい。
Sの方が大きい場合や等しい場合は、Sの数からTの数を引けばよく、char型同士の引き算でちゃんとint型で答えが出る。
Tの方が大きい場合は、一度数をループさせる都合上、Sの数に10を足してからTの数を引けばよい。
これはif分岐を使って実装してもいいし、常に10を足す方で計算した後に%10してもよい。

解答例


注意点

可能性がある候補数を間違えない。

うっかりN-Mヶ所としないように。
forループの終了条件を間違えると、最後の1つの処理が抜けてしまう。

別解

最近更新されたスレッド
ウィキ募集バナー