ABC088 B - Card Game for Two

備忘録

問題

atcoder.jp

回答

"use strict"
function Main(input) {
  input = input.trim().split('\n');
  const N = input[0];
  const A = input[1].trim().split(' ').map(Number).sort((a,b) => b-a);
 
  let a = 0;
  let b = 0;
  for(let i=0; i<N; i++){
    if(i % 2 === 0){
      a += A[i];
    } else {
      b += A[i];
    }
  }
 
  console.log(a-b);
}
Main(require("fs").readFileSync("/dev/stdin", "utf8"));

考え方

  1. Alice, Bob ともに得点を最大化するようにカードを選択する。
  2. カードの選択はAliceから行われる。

カードの配列(A)を降順ソートし、先頭から順に加算することで、ルール1を満たし、
カードの枚数回ループを行い、ループの回数でどちらの選択時か判断し、加算を行うことでルール2を満たせる。