Official
B - カード取りゲーム / Card Taking Game Editorial
by
B - カード取りゲーム / Card Taking Game Editorial
by
physics0523
高橋君は(高橋君の得点) −(青木君の得点)を最大化するように、青木君は(高橋君の得点) −(青木君の得点)を最小化するように、それぞれ最適にプレイします。
両者の得点の最終的な総和は \(A\) の総和となるため、不変です。なので、両者ともに自分の得点を最大化することになります。
両者ともに残っているカードのうち最大のものを取り続けるという戦略が最適となります。
その結果、カードの値の降順(大きなものを先に並べる)に並べた時、 \(1,3,5,\dots\) 枚目を高橋君、 \(2,4,6,\dots\) 枚目を青木君が取ることになります。
実装例 (C++):
#include<bits/stdc++.h>
using namespace std;
using ll=long long;
int main(){
ll N;
cin >> N;
vector<ll> A(N);
for(auto &nx : A){cin >> nx;}
sort(A.rbegin(),A.rend());
ll res=0;
for(ll i=0;i<N;i++){
if(i%2){res-=A[i];}
else{res+=A[i];}
}
cout << res << "\n";
return 0;
}
posted:
last update:
