paiza Aランクレベルアップメニュー「区間和の計算 PHP編」解答例

区間和というのがなぜか読んでも理解できずものすごく時間がかかりました。
ちょっと数学じみた解説が入ってしまうととたんに理解できなくなる。
前世で何かあったに違いありません。

数学的な説明の理解はいったんあきらめて、
単純にコードに集中して「そういうものらしい」と見切りを付けました。
コードならわかる。

<?php
    // 自分の得意な言語で
    // Let's チャレンジ!!

    $num = trim(fgets(STDIN));

    $hoge = explode(" ",trim(fgets(STDIN)));
    //print_r($hoge);
    
    //累積和
    $sum[0] = 0;
    for($i = 0; $i < $num; $i++){
        $sum[$i+1] = $sum[$i] + $hoge[$i];
    }
    array_shift($sum);//余計な冒頭要素を消す
    //print_r($sum);
    
    
    $range_num = trim(fgets(STDIN));
    for ($i = 0; $i < $range_num; $i++) {
        $ranges[] = explode(" ",trim(fgets(STDIN)));
    }
    
    //print_r($ranges);
    
    for ($i = 0; $i < $range_num; $i++) {
        $start = $ranges[$i][0]-1;//ここ-1なんだな
        $end = $ranges[$i][1];
        
        echo($sum[$end] - $sum[$start]."\n");
    }
    

?>

累積和を使うと計算が速いというのも正直理解ができないのですが
なにかコンピューター的に楽なんでしょう。
不思議です。

paizaさんが解説をつけてくれるようになったのが大変ありがたいです。

あぶらぼうず

問題一覧はこちら
paizaAランクレベルアップメニュー(php)

https://paiza.jp/works/mondai/a_rank_level_up_problems/problem_index?language_uid=php
0

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です