Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

เกมพลิกไพ่ (Card Flipping Game) ใน C++

มีไพ่ N ใบ แต่ละใบมีตัวเลขสองด้าน (fronts[i], backs[i]) สามารถพลิกไพ่ได้ หลังพลิกเลือกไพ่หนึ่งใบ ถ้าตัวเลขด้านหลังไม่อยู่ด้านหน้าของไพ่ใดๆ เรียกว่า "good" หาตัวเลข good ที่น้อยที่สุด

ตัวอย่าง

Input − fronts=[1,2,4,4,7], backs=[1,3,4,1,3] Output − 2

คำอธิบาย − พลิกไพ่ที่ 2: fronts=[1,3,4,4,7], backs=[1,2,4,1,3] เลือกไพ่ที่ 2 ด้านหลัง=2 ไม่อยู่ใน fronts → good

แนวทางการแก้ปัญหา

  • ตัวเลขที่อยู่ทั้งสองด้านของไพ่ใดไพ่หนึ่ง (fronts[i]==backs[i]) ไม่สามารถเป็น good ได้ → ใส่ set "bad"
  • หาตัวเลขน้อยที่สุดใน fronts และ backs ที่ไม่อยู่ใน bad set

ตัวอย่างโค้ด C++

#include <bits/stdc++.h>
using namespace std;

class Solution {
public:
    int flipgame(vector& fronts, vector& backs) {
        unordered_set bad;
        int n = fronts.size();
        for (int i = 0; i < n; i++)
            if (fronts[i] == backs[i]) bad.insert(fronts[i]);
        
        int ans = INT_MAX;
        for (int x : fronts) if (!bad.count(x)) ans = min(ans, x);
        for (int x : backs) if (!bad.count(x)) ans = min(ans, x);
        return ans == INT_MAX ? 0 : ans;
    }
};

int main() {
    vector fronts = {1,2,4,4,7};
    vector backs = {1,3,4,1,3};
    Solution ob;
    cout << ob.flipgame(fronts, backs); // 2
    return 0;
}

ผลลัพธ์

2

บทความนี้แก้ปัญหา Card Flipping Game (LeetCode 822) โดยระบุตัวเลข "bad" ที่อยู่ทั้งสองด้านไพ่เดียวกัน แล้วหาตัวเลขน้อยที่สุดที่ไม่ใช่ bad จากทั้งสองด้าน