สมมติว่าเรามีรายการคำ ตอนนี้ให้พิจารณาเกมผีที่ผู้เล่นสองคนสามารถเข้าร่วมได้ ที่นี่ผู้เล่นสลับตัวอักษรต่อท้ายสตริง และสตริงที่ทำขึ้นต้องเป็นคำนำหน้าที่ถูกต้องของคำในรายการ และผู้เล่นที่สะกดคำในรายการจะแพ้ เราต้องเช็คก่อนว่าผู้เล่นคนแรกจะชนะหรือไม่ถ้าผู้เล่นทั้งคู่เล่นได้อย่างเต็มประสิทธิภาพ
ดังนั้นหากอินพุตเป็นเหมือนคำ =["จัดการ", "ผู้จัดการ", "นาที"] ผลลัพธ์จะเป็น True เนื่องจากสามารถเล่นได้ -
- m [ผู้เล่น 1]
- หม่าล่า [ผู้เล่น 2]
- ผู้ชาย [ผู้เล่น 1]
- มานา [ผู้เล่น 2]
- จัดการ [ผู้เล่น 1]
- จัดการ [ผู้เล่น 2] แพ้
ผู้เล่น 1 คนจึงชนะ
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- กำหนดหนึ่ง mp mp
- สำหรับแต่ละคำในคำ ทำ
- ch :=it[0]
- แทรกลงใน mp[ch]
- mn :=inf
- สำหรับการจับคู่คีย์-ค่าแต่ละรายการใน mp ให้ทำ
- str :=คุณค่าของมัน
- ขนาด :=ขนาดของ str
- ถ้า mod ขนาด 2 เท่ากับ 0 แล้ว −
- คืน 1
- คืน 0
ตัวอย่าง (C++)
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
#include <bits/stdc++.h>
using namespace std;
bool solve(vector<string> &words) {
map<char, set<string>> mp;
for (auto &it : words) {
char ch = it[0];
mp[ch].insert(it);
}
int mn = INT_MAX;
for (auto &it : mp) {
string str = *(it.second.begin());
int size = str.size();
if (size % 2 == 0)
return 1;
}
return 0;
}
int main(){
vector<string> v = {"manage", "manager", "min"};
cout << solve(v);
} อินพุต
{"manage", "manager", "min"} ผลลัพธ์
1