【累積和メニュー】> 【二次元累積和】STEP: 2 二次元累積和 2 (paizaランク C 相当) [難易度: 1342 ±44]
※リンク先へ移動するためには[paiza]へのログインが必要です。
5 行 5 列の整数の二次元配列 A が与えられます。
A の i 行目 j 列目を A_{i, j} (0 ≦ i ≦ 4, 0 ≦ j ≦ 4) と表すことにします。
長方形領域の左上の要素を A_{1, 1}, 右下の要素を A_{3, 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
出力値(例)
45
解答例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
<?php for ($i=0; $i<5; $i++) { $a[$i] = explode(" ", trim(fgets(STDIN))); } //print_r($a); $sy = 1; $sx = 1; $ly = 3; $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; ?> |