สมมติว่าเรามีรายการคำ ตอนนี้ให้พิจารณาเกมผีที่ผู้เล่นสองคนสามารถเข้าร่วมได้ ที่นี่ผู้เล่นสลับตัวอักษรต่อท้ายสตริง และสตริงที่ทำขึ้นต้องเป็นคำนำหน้าที่ถูกต้องของคำในรายการ และผู้เล่นที่สะกดคำในรายการจะแพ้ เราต้องเช็คก่อนว่าผู้เล่นคนแรกจะชนะหรือไม่ถ้าผู้เล่นทั้งคู่เล่นได้อย่างเต็มประสิทธิภาพ
ดังนั้นหากอินพุตเป็นเหมือนคำ =["จัดการ", "ผู้จัดการ", "นาที"] ผลลัพธ์จะเป็น 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