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