【累積和メニュー】> 【二次元累積和】STEP: 3 二次元累積和 3 (paizaランク C 相当) [難易度: 1667 ±40]
※リンク先へ移動するためには[paiza]へのログインが必要です。
1 行目に整数 a, b が与えられます。
2 行目以降に 5 行 5 列の整数の二次元配列 A が与えられます。
A の i 行目 j 列目を A_{i, j} (0 ≦ i ≦ 4, 0 ≦ j ≦ 4) と表すことにします。
長方形領域の左上の要素を A_{a, 3} 、右下の要素を A_{b, 3} としたとき、この長方形領域内の整数の和を累積和を用いて求め、一行で出力してください。
入力値(例)
1 3
1 2 3 4 5
2 3 4 5 6
3 4 5 6 7
4 5 6 7 8
5 6 7 8 9
出力値(例)
18
解答例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
<?php list($ay, $by) = explode(" ", trim(fgets(STDIN))); for ($i=0; $i<5; $i++) { $a[$i] = explode(" ", trim(fgets(STDIN))); } //print_r($a); $sy = $ay; $sx = 3; $ly = $by; $lx = 3; $h = 5; $w = 5; $sRow = array_fill(0, $w+1, 0); $s = array_fill(0, $h+1, $sRow); for ($i=0; $i<$h; $i++) { for ($j=0; $j<$w; $j++) { $s[$i+1][$j+1] = $a[$i][$j]+$s[$i][$j+1]+$s[$i+1][$j]-$s[$i][$j]; } } //print_r($s); $ans = $s[$ly+1][$lx+1]-$s[$sy][$lx+1]-$s[$ly+1][$sx]+$s[$sy][$sx]; echo $ans; ?> |