मान लीजिए कि हमारे पास आकार n के दो सरणियाँ A हैं, और B आकार m के हैं, और दूसरी संख्या r है। शेयर खरीदने के मौके नहीं हैं। उनमें से i-th जितने चाहें उतने शेयर खरीदने की अनुमति देता है, ith शेयर की कीमत A [i] है। और शेयर बेचने के भी अवसर हैं। उनमें से i-th हमें जितने चाहें उतने शेयर बेचने की अनुमति देता है, ith शेयर का विक्रय मूल्य B [i] है। हम अपने से अधिक शेयर नहीं बेच सकते। यदि हमारे पास r राशि है और कोई मौजूदा शेयर नहीं है, तो हमें खरीदने और बेचने के बाद अधिकतम राशि का पता लगाना होगा।
इसलिए, यदि इनपुट ए =[4, 2, 5] जैसा है; बी =[4, 4, 5, 4]; r =11, तो आउटपुट 26 होगा, क्योंकि हमारे पास 11 राशि है। किसी शेयर के 5 शेयरों को 2 की कीमत पर खरीदना और फिर उन सभी को 5 की कीमत पर बेचना सबसे अच्छा है। इस प्रकार हम अंत में 26 प्राप्त कर सकते हैं।
कदम
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
n := size of A an := 1100 bn := 0 for initialize i := 0, when i < n, update (increase i by 1), do: if an > A[i], then: an := A[i] for initialize i := 0, when i < m, update (increase i by 1), do: if bn < B[i], then: bn := B[i] if bn > an, then: r := bn * (r / an) + (r - (r / an) * an) return r
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
#include <bits/stdc++.h> using namespace std; int solve(vector<int> A, vector<int> B, int r){ int n = A.size(), m = B.size(); int an = 1100, bn = 0; for (int i = 0; i < n; i++){ if (an > A[i]) an = A[i]; } for (int i = 0; i < m; i++){ if (bn < B[i]) bn = B[i]; } if (bn > an){ r = (bn) * (r / an) + (r - (r / an) * an); } return r; } int main(){ vector<int> A = { 4, 2, 5 }; vector<int> B = { 4, 4, 5, 4 }; int r = 11; cout << solve(A, B, r) << endl; }
इनपुट
{ 4, 2, 5 }, { 4, 4, 5, 4 }, 11
आउटपुट
26