ABC156 C - Rally

備忘録

問題

atcoder.jp

回答

"use strict"
function consume(x, p){
  return Math.pow((x - p), 2);
}
 
function Main(input) {
  input = input.trim().split('\n');
  const N = Number(input[0]);
  const X = input[1].split(' ').map(Number);
  const M = X.length;
 
  let ret = [];
  for(let p=1; p<=101; p++){
    let tmp = 0;
    for(let i=0; i<M; i++){
      tmp += consume(X[i], p);
    }
    ret.push(tmp);
  }
  
  console.log(Math.min(...ret));
}
Main(require("fs").readFileSync("/dev/stdin", "utf8"));

考え方

公式解説の通り、探索対象となる座標P1≦P≦100となる。
住人も最大N人のため、各座標PにおけるN人の体力消費を算出した場合でも、
最大1e4回程度の計算のため、愚直にループを2つ重ねることができる。
(上記回答では座標Pに対して、101回ループを行っているが。。)

座標Pの探索範囲にさえ気が付けば、あとは単純な計算を繰り返すだけ。