본문으로 바로가기

C133:雷危険地域

category TIL/Algorithm 2024. 4. 28. 22:52

A さんは、雷がよく落ちる地域に出張することになりました。A さんは雷が苦手なので、その地域の中で、比較的雷が落ちにくいエリアを探そうとしています。
そこで、A さんは、地域全体を H x W のマス目に分割し、それぞれのマスに雷が落ちた回数を記録しました。
その後、その地域を、お互いに重ならない 3 x 3 の 9 マスからなるエリアにわけ、エリアの各マスに雷が落ちた回数の平均値の小数点以下を切り捨てたものをそのエリアの危険度として計算してみることにしました。

全てのエリアの危険度を出力してください。ここで、H と W は 3 で割り切れる値です。

入力例 1 の場合、以下の図のように、3 x 3 の 9 マスからなるエリア 4 つに分けられます。それぞれのエリアに落ちた雷の回数の平均値をとり、小数点以下を切り捨てた値が、期待される出力となります。

評価ポイント10回のテストケースで、正答率、実行速度、メモリ消費量をはかり得点が決まります。
より早い解答時間で提出したほうが得点が高くなります。
  1. 複数のテストケースで正しい出力がされるか評価(+50点)
  2. 解答までの速さ評価(+50点)
入力される値

入力は以下のフォーマットで与えられます。

H W
s_{1,1} s_{1,2} ... s_{1,W}
s_{2,1} s_{2,2} ... s_{2,W}
...
s_{H,1} s_{H,2} ... s_{H,W}
  • ・1 行目にそれぞれ地域の縦のマスの数、横のマスの数を表す整数 H, W がこの順で半角スペース区切りで与えられます。
  • ・続く H 行のうちの i 行目 (1 ≦ i ≦ H) には W 個の整数が半角スペース区切りで与えられます。i 行目の j 番目の整数 s_{i, j} はある地域における i 行 j 列目のマスに雷が落ちた回数を表します。
  • ・入力は合計で H + 1 行となり、入力値最終行の末尾に改行が 1 つ入ります。

それぞれの値は文字列で標準入力から渡されます。標準入力からの値取得方法はこちらをご確認ください
期待する出力重ならない 9 マスごとの危険度を以下の形式で出力してください。
v_{1,1} v_{1,2} ... v_{1,W/3}
v_{2,1} v_{2,2} ... v_{2,W/3}
...
v_{H/3,1} v_{H/3,2} ... v_{H/3,W/3}
・期待する出力は H / 3 行からなります。
・H / 3 行のうちの i 行目 (1 ≦ i ≦ H / 3) には、 W / 3 個の整数を半角スペース区切りで出力してください。i 行目 j 番目の整数は、地域を表すマスの 3 × i - 1 行目 3 × j - 1 列目のマスを中心とした 9 マスの平均値を表し、平均値は、小数点以下を切り捨てて整数で出力してください。
・出力最終行の末尾に改行を入れ、余計な文字、空行を含んではいけません。
条件

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

  • ・3 ≦ H, W ≦ 999
  • ・0 ≦ s_{i,j} ≦ 1,000 (1 ≦ i ≦ H, 1 ≦ j ≦ W)
  • ・H, W は共に 3 で割り切れる
入力例1
6 6
3 4 6 2 4 6
3 5 1 3 5 3
5 1 3 6 6 4
7 8 3 2 2 2
5 9 3 2 2 2
7 2 4 2 2 2
出力例1
3 4
5 2
入力例2
6 3
55 66 3
1 35 36
55 3 2
3 53 77
46 46 14
31 3 5
出力例2
28
30

0

4 つに分けられます

3 で割り切れる値です

平均値

各マス 각 집단, 모임, 칸

9 マスからなるエリアにわけ 9칸으로 된/ 으로 이루어진

お互いに重ならない(かさなる)겹치다 포개어지다

マス目に分割し(ぶんかつし)분할 해

落ちにくいエリア

比較的(ひかくてき)

雷が苦手なので

# 6 6
# 3 4 6 2 4 6
# 3 5 1 3 5 3
# 5 1 3 6 6 4
# 7 8 3 2 2 2
# 5 9 3 2 2 2
# 7 2 4 2 2 2

a, b = map(int, input().split())
# print(a, b)
snow_list = [list(map(int, input().split())) for i in range(a)]
# print(snow_list)
for i in range(0, a, 3):
    for j in range(0, b, 3):
        total = 0
        for x in range(i, i+3):
            for y in range(j, j+3):
                total += snow_list[x][y]
        danger_level = total // 9
        print(danger_level, end=' ')
    print()

'TIL > Algorithm' 카테고리의 다른 글

C137:取締役選任  (0) 2024.05.01
C131:ユニークな部屋番号  (0) 2024.04.30
C092:工場のベルトコンベア  (0) 2024.04.27
C032:お得な買い物 ???  (0) 2024.04.26
C094:国民の税金  (0) 2024.04.25