สมมติว่าเรามีตัวเลข n สองอาร์เรย์ A และ B ขนาด k1 และ k2 ตามลำดับ Amal และ Bimalare เล่นเกมไพ่ที่น่าสนใจ มีไพ่ n ใบ เลข 1 ถึง n ในขั้นต้นบัตรจะถูกแจกจ่ายระหว่างพวกเขา เกมดำเนินไปดังนี้:ในแต่ละเทิร์น ผู้เล่นแต่ละคนหยิบไพ่หนึ่งใบ (แล้วแต่ว่าพวกเขาต้องการ) แล้ววางลงบนโต๊ะ เพื่อที่ผู้เล่นอีกคนจะไม่เห็นไพ่ที่พวกเขาเลือก จากนั้นไพ่ทั้งสองใบจะถูกเปิดเผย และผู้เล่นที่มีหมายเลขบัตรมากกว่า จะหยิบไพ่ทั้งสองใบในมือของเขา ไพ่ทุกใบสามารถเล่นได้ไม่จำกัดจำนวนครั้ง เป็นตัวแทนของไพ่ที่ Amal เล่น B หมายถึงไพ่ที่ Bimal เล่น ผู้เล่นจะแพ้ถ้าไม่มีไพ่ เราต้องหาผู้ชนะคนสุดท้าย
ดังนั้นหากอินพุตเป็นเช่น n =5; A =[3, 2]; B =[5, 1, 4] แล้วเอาท์พุตจะเป็น Bimal เพราะในตอนแรกพวกเขากำลังเล่น (3, 5), Bimal หยิบไพ่ทั้งหมด จากนั้นเล่น (3, 1) Amal หยิบไพ่ทั้งสองใบแล้วถ้าพวกเขาเล่น (3 , 4) Bimal รับทั้งหมดแล้วถ้า Amal เล่น 1 Bimal จะนำพวกเขาด้วยการ์ด 5 ดังนั้นจะไม่มีไพ่อยู่ในมือของ Amal
ขั้นตอน
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
d := 0 e := 0 for initialize i := 0, when i < size of A, update (increase i by 1), do: f := A[i] if d < f, then: d := f for initialize i := 0, when i < size of A, update (increase i by 1),do: f := A[i] if e < f, then: e := f if d > e, then: return "Amal" Otherwise return "Bimal"
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
#include<bits/stdc++.h> using namespace std; string solve(int n, vector<int> A, vector<int> B){ int d = 0; int e = 0; for(int i = 0; i<A.size(); i++){ int f = A[i]; if (d < f) d = f; } for(int i = 0; i<A.size(); i++){ int f = A[i]; if(e < f) e = f; } if (d > e) return "Amal"; else return "Bimal"; } int main(){ int n = 5; vector<int> A = {3, 2}; vector<int> B = {5, 1, 4}; cout << solve(n, A, B) << endl; }
อินพุต
5, {3, 2}, {5, 1, 4}
ผลลัพธ์
Bimal