【スキルチェック過去問題セット】> 日別訪問者数の最大平均区間 (paizaランク B 相当) [難易度: 1628 ±9]
※リンク先へ移動するためには[paiza]へのログインが必要です。
あなたは、とあるウェブサイトを管理していました。
ある連続したk日間、このウェブサイトでキャンペーンを行ったのですが、いつからいつまでの期間に行ったかを忘れてしまいました。
幸い、ウェブサイトを運営していた全n日分のアクセスログが残っており、1日ごとの訪問者数が分かっています。
とりあえず、連続するk日の中で、1日あたりの平均訪問者数が最も多い期間を、キャンペーンを行った期間の候補だと考えることにしました。
n日分の訪問者数のリストとキャンペーンの日数kが入力されるので、キャンペーンを行った期間の候補数と、候補の中で最も早い開始日を出力してください。
入力値(例)
5 3
1 2 3 2 1
出力値(例)
1 2
解答例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
<?php list($n, $k) = explode(" ", trim(fgets(STDIN))); $a = explode(" ", trim(fgets(STDIN))); $total = [$n-$k+1]; for ($i=0; $i<$n-$k+1; $i++) { $total[$i] = 0; for ($j=$i; $j<$i+$k; $j++) { $total[$i] += $a[$j]; } } $max = 0; for ($i=0; $i<$n-$k+1; $i++) { if ($max<=$total[$i]) $max = $total[$i]; } $count = 0; for ($i=0; $i<$n-$k+1; $i++) { if ($total[$i] == $max) $count++; } $first_day = 0; for ($i=0; $i<$n-$k+1; $i++) { if ($total[$i] == $max) { $first_day = $i+1; break; } } printf("%d %d\n", $count, $first_day); ?> |