मान लीजिए कि हमारे पास आकार n के दो सरणियाँ P और T हैं। और एक और नंबर सी है। अमल और बिमल एक गणित प्रतियोगिता में भाग लेने जा रहे हैं। एन समस्याएं हैं। Ith समस्या का प्रारंभिक स्कोर P[i] है, और इसे हल करने के लिए T[i] लेता है। P और T दोनों को बढ़ते क्रम में क्रमबद्ध किया गया है। यहाँ c अंक खोने का स्थिरांक है। यदि समय x (प्रतियोगिता शुरू करने के x मिनट बाद) पर कोई समस्या प्रस्तुत की जाती है, तो यह अधिकतम (0, P[i] - c*x) अंक देता है। अमल क्रम 1, 2, ... n में समस्याओं को हल करने जा रहा है और बिमल उन्हें n, n-1, ... 1 की तरह हल करने जा रहा है। हमें यह पता लगाना है कि अधिकतम अंक किसे मिलेगा। अगर उन्हें वही मिला है, तो वह 'टाई' होगी।
इसलिए, यदि इनपुट c =2 जैसा है; पी =[50, 85, 250]; टी =[10, 15, 25], तो आउटपुट अमल होगा।
कदम
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
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"
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
#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;
} इनपुट
2, { 50, 85, 250 }, { 10, 15, 25 } आउटपुट
Amal