公式

C - 期末テストのやり直し / Make-Up Exam 解説 by kyopro_friends


科目 \(i\) の試験をやりなおすことで上乗せすることができる点は \(P_i- A_i\) 点なので、 \(P_i-A_i\) が最大である科目の試験をやりなおすと得点差を最大化することができます。

よって、元の点差 \(\sum A_i - \sum B_i\)\(\max(P_i-A_i)\) を加えたものが答えとなります。

実装例 (C++)

#include<bits/stdc++.h>
using namespace std;

int main(){
  int n;
  cin >> n;
  vector<int>p(n),a(n),b(n);
  for(int i=0; i<n; i++) cin >> p[i];
  for(int i=0; i<n; i++) cin >> a[i];
  for(int i=0; i<n; i++) cin >> b[i];
  
  long long s = 0;
  for(int i=0; i<n; i++){
    s += a[i] - b[i];
  }
  int d = 0;
  for(int i=0; i<n; i++){
    d = max(d, p[i] - a[i]);
  }
  cout << s + d << endl;
}

実装例 (Python)

N = int(input())
P = list(map(int, input().split()))
A = list(map(int, input().split()))
B = list(map(int, input().split()))
s = sum(a - b for a, b in zip(A, B))
d = max(p - a for p, a in zip(P, A))
print(s + d)

投稿日時:
最終更新: