Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

โค้ด C++ หาผู้ชนะการแข่งขันคณิตศาสตร์

โจทย์: มีโจทย์ 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