สมมติว่าเรามีตัวเลข n, อาร์เรย์ A และ B ขนาด k1 และ k2 อมลและบิมลเล่นเกมไพ่ มีไพ่ n ใบ หมายเลข 1 ถึง n เริ่มต้นแจกไพ่ระหว่างกัน เกมดำเนินไป: แต่ละรอบแต่ละคนเลือกไพ่ใบหนึ่งจากมือ (ใดก็ได้) วางบนโต๊ะ ปิดไว้ไม่ให้อีกฝ่ายเห็น แล้วเปิดไพ่ทั้งสอง ใครมีเลขมากกว่าเอาไพ่ทั้งสองใบ ไพ่ใดก็ได้เล่นซ้ำได้ A คือไพ่อมลเล่น B คือไพ่บิมลเล่น ผู้ที่ไม่มีไพ่แพ้ หาผู้ชนะสุดท้าย
เช่น ถ้าอินพุตคือ n = 5; A = [3, 2]; B = [5, 1, 4] เอาต์พุตจะเป็น Bimal เพราะเริ่มเล่น (3,5) บิมลเอาทั้งสอง แล้ว (3,1) อมลเอา แล้ว (3,4) บิมลเอา แล้วอมลเล่น 1 บิมลเอาด้วย 5 ไม่มีไพ่เหลือ
ขั้นตอนการแก้ปัญหา
d := 0, e := 0
for i := 0 ถึง size of A - 1:
f := A[i]
if d < f: d := f
for i := 0 ถึง size of A - 1:
f := A[i]
if e < f: e := f
if d > e: 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, 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