1. paizaラーニングトップ
  2. レベルアップ問題集
  3. 第1回P共通テスト過去問題(言語選択)
  4. 問題一覧 C++編
  5. Q6: 画像の切り抜き

第1回P共通テスト過去問題のサムネイル
Q6: 画像の切り抜き (paizaランク S 相当)

問題にチャレンジして、ユーザー同士で解答を教え合ったり、コードを公開してみよう!

問題

下記の問題をプログラミングしてみよう!

※この問題は、2021年1月に開催されたP共通テスト(バンタンテックフォードアカデミー中高プログラミング共通テスト)で出題された問題です。

ここにあなたの友人が撮影した長方形の白黒画像があり、縦 H マス、横 W マスのマス目状に分割されています。

この画像において、上から i 番目、左から j 番目のマスの色は、S_i_j = 0 なら白、S_i_j = 1 なら黒です。



あなたは、この画像から縦 N マス以上、横 M マス以上の、グリッドに沿った長方形の白黒画像のうち、

出来るだけ黒い画像を切り抜きたいと考えています。



ここで、切り抜いた画像の黒さを、(長方形に含まれる黒色のマスの数) / (長方形のすべてのマスの数) と定義することにします。

縦 N マス以上、横 M マス以上の長方形の白黒画像を切り抜くとき、その黒さの最大値を求めてください。

入力される値

H W N M
S_1
S_2
...
S_H


・1 行目には、友人が撮影した画像の縦のマス数 H, 横のマス数 W, 切り抜く画像の縦のマス数の下限 N, 横のマス数の下限 M がこの順で半角スペース区切りで与えられます。
・続く H 行のうちの i 行目 (1 ≦ i ≦ H) には、友人が撮影した画像の i 行目にあるマスの色を表す、0 または 1 からなる長さ W の文字列が与えられます。
・入力は合計で H + 1 行となり、入力値最終行の末尾に改行が 1 つ入ります。


入力値最終行の末尾に改行が1つ入ります。
文字列は標準入力から渡されます。 標準入力からの値取得方法はこちらをご確認ください
期待する出力

与えられた白黒画像から縦 N マス以上、横 M マス以上の長方形の白黒画像を切り抜くときの、問題文に定義した黒さの最大値を小数で 1 行で出力してください。
出力した値と真の値の絶対誤差が 10^{-6} 以下であれば正解となります。

条件

すべてのテストケースにおいて、以下の条件を満たします。

・入力はすべて整数
・1 ≦ H ≦ 10
・1 ≦ W ≦ 10,000
・1 ≦ N ≦ H
・1 ≦ M ≦ W
・S_i_j = 0 または S_i_j = 1

入力例1

3 3 2 2
101
010
101

出力例1

0.555555555555555

入力例2

4 7 2 3
1011010
0010011
1101100
0100101

出力例2

0.625000000000000

問題一覧へ戻る

ページの先頭へ戻る