โจทย์: มีโจทย์ n ข้อ คะแนนเริ่มต้น P[i] เวลาแก้ T[i] (เรียงเพิ่ม) ค่าคงที่ c สำหรับหักคะแนน ส่งที่เวลา x ได้คะแนน max(0, P[i]-c*x) Amal แก้ 1→n Bimal แก้ n→1 หาผู้ได้คะแนนมากกว่า
Input: c=2, P=[50,85,250], T=[10,15,25] → Output: Amal
ขั้นตอนแก้
m := 0, ans1 := 0, ans2 := 0
for i := 0 to n-1:
m += T[i]
ans1 += max(0, P[i] - c*m)
m := 0
for i := n-1 down to 0:
m += T[i]
ans2 += max(0, P[i] - c*m)
if ans1 > ans2: return "Amal"
else if ans1 < ans2: return "Bimal"
else: return "Tie"ตัวอย่างโค้ด
#include <bits/stdc++.h>
using namespace std;
string solve(int c, vector<int> P, vector<int> T) {
int n = P.size(), m = 0, ans1 = 0, ans2 = 0;
for (int i = 0; i < n; i++) {
m += T[i];
ans1 += max(0, P[i] - c * m);
}
m = 0;
for (int i = n-1; i >= 0; i--) {
m += T[i];
ans2 += max(0, P[i] - c * m);
}
if (ans1 > ans2) return "Amal";
else if (ans1 < ans2) return "Bimal";
else return "Tie";
}
int main() {
int c = 2;
vector<int> P = {50,85,250}, T = {10,15,25};
cout << solve(c,P,T) << endl;
}Input
2, {50,85,250}, {10,15,25}Output
Amal