মনে করুন অমল এবং বিমল একটি গেম খেলছে এবং অমলের টার্ন প্রথম। গেমটি নিচের মতো:
একটি পিলে nটি স্টোন আছে। প্রতিটি খেলোয়াড় পিল থেকে একটি স্টোন নিতে পারে এবং সেই স্টোর পজিশন অনুযায়ী পয়েন্ট পাবে। অমল এবং বিমল স্টোনগুলো ভিন্নভাবে ভ্যালু করতে পারে।
আমাদের দুটি সমান দৈর্ঘ্যের অ্যারে আছে: A_Values এবং B_Values। প্রতিটি A_Values[i] এবং B_Values[i] যথাক্রমে অমল ও বিমল i-তম স্টোনকে কত ভ্যালু করে তা বোঝায়। সব স্টোন নেয়া শেষে যাদের স্কোর বেশি সে বিজয়ী। টাই হলে ড্র। দুজনই অপ্টিমালি খেলবে এবং অন্যের ভ্যালু জানবে। অমল জিতলে ১, বিমল জিতলে -১, ড্র হলে ০ রিটার্ন করুন।
যেমন, ইনপুট A_Values = [2,4], B_Values = [3,5] হলে, আউটপুট হবে ১ কারণ অমল দ্বিতীয় স্টোন নিবে (পয়েন্ট ৪), বিমল বাধ্য হয় প্রথম স্টোন নিতে (পয়েন্ট ৩), অমল বেশি পয়েন্ট পায়।
সমাধান পদ্ধতি
এই সমস্যাটি সমাধান করতে নিচের ধাপগুলো অনুসরণ করুন:
- n := A_Values-এর সাইজ
- combinedValues := একটি নতুন লিস্ট
- i = 0 থেকে n-1 পর্যন্ত
- tmpV := A_Values[i] + B_Values[i]
- (tmpV, i) জোড়া combinedValues-এ অ্যাপেন্ড করুন
- combinedValues কে রিভার্স অর্ডারে সর্ট করুন
- score_a := 0, score_b := 0
- i = 0 থেকে n-1 পর্যন্ত
- curV := combinedValues[i]
- যদি i % 2 == 0 হয়, তবে
- score_a += A_Values[curV[1]]
- অন্যথায়,
- score_b += B_Values[curV[1]]
- যদি score_a > score_b হয়, তবে
- 1 রিটার্ন করুন
- অন্যথায় যদি score_a == score_b হয়, তবে
- 0 রিটার্ন করুন
- অন্যথায়,
- -1 রিটার্ন করুন
উদাহরণ
নিচের ইমপ্লিমেন্টেশনটি দেখুন আরও ভালো বোঝার জন্য:
def solve(A_Values, B_Values): n = len(A_Values) combinedValues = [] for i in range(n): tmpV = A_Values[i] + B_Values[i] combinedValues.append([tmpV, i]) combinedValues.sort(reverse=True) score_a, score_b = 0, 0 for i in range(n): curV = combinedValues[i] if (i % 2 == 0): score_a += A_Values[curV[1]] else: score_b += B_Values[curV[1]] if (score_a > score_b): return 1 elif (score_a == score_b): return 0 else: return -1 A_Values = [2,4] B_Values = [3,5] print(solve(A_Values, B_Values))
ইনপুট
[2,4], [3,5]
আউটপুট
1