Computer >> Máy Tính >  >> Lập trình >> C ++

Mã C ++ để tìm người chiến thắng cuộc thi toán học

Giả sử chúng ta có hai mảng P và T kích thước n. Và có một số khác c. Amal và Bimal sẽ tham gia một cuộc thi toán học. Có n vấn đề. Bài toán thứ i có điểm ban đầu là P [i], và lấy T [i] để giải nó. P và T đều được sắp xếp theo thứ tự tăng dần. Ở đây c là hằng số cho điểm mất. Nếu một vấn đề được gửi vào thời điểm x (x phút sau khi bắt đầu cuộc thi), nó cho điểm tối đa (0, P [i] - c * x). Amal sẽ giải các bài toán theo thứ tự 1, 2, ... n và Bimal sẽ giải chúng như n, n-1, ... 1. Chúng ta phải tìm xem ai sẽ đạt điểm tối đa. Nếu họ có giống nhau, đó sẽ là 'Tie'.

Vì vậy, nếu đầu vào giống như c =2; P =[50, 85, 250]; T =[10, 15, 25], thì đầu ra sẽ là Amal.

Các bước

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

n := size of P
m := 0
ans1 := 0
ans2 := 0
for initialize i := 0, when i < n, update (increase i by 1), do:
   m := m + T[i]
   ans1 := ans1 + maximum of (0, P[i] - c * m)
m := 0
for initialize i := n - 1, when i > 1, update (decrease i by 1), do:
   m := m + T[i]
   ans2 := ans2 + maximum of (0, P[i] - c * m)
if ans1 > ans2, then:
   return "Amal"
otherwise when ans1 < ans2, then:
   return "Bimal"
Otherwise
   return "Tie"

Ví dụ

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

#include <bits/stdc++.h>
using namespace std;
string solve(int c, vector<int> P, vector<int> T){
   int n = P.size();
   int 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 > 1; 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 };
   vector<int> T = { 10, 15, 25 };
   cout << solve(c, P, T) << endl;
}

Đầu vào

2, { 50, 85, 250 }, { 10, 15, 25 }

Đầu ra

Amal