समस्या विवरण
मान लीजिए हमारे पास शब्दों की एक सूची है। अब एक घोस्ट गेम पर विचार करें जहां दो खिलाड़ी भाग ले सकते हैं। यहां खिलाड़ी बारी-बारी से एक स्ट्रिंग में अक्षर जोड़ते हैं। और बनाई जा रही स्ट्रिंग सूची में किसी शब्द का वैध प्रीफिक्स होनी चाहिए, और जो खिलाड़ी सूची में किसी शब्द को पूरा करता है वह हार जाता है। हमें जांचना है कि यदि दोनों खिलाड़ी इष्टतम खेलते हैं तो पहला खिलाड़ी जीत सकता है या नहीं।
उदाहरण के लिए, यदि इनपुट है words = ["manage", "manager", "min"], तो आउटपुट True होगा, क्योंकि वे इस तरह खेल सकते हैं:
- m [खिलाड़ी 1]
- ma [खिलाड़ी 2]
- man [खिलाड़ी 1]
- mana [खिलाड़ी 2]
- manag [खिलाड़ी 1]
- manage [खिलाड़ी 2] हार
तो खिलाड़ी 1 जीतता है।
हल करने का दृष्टिकोण
इस समस्या को हल करने के लिए हम निम्नलिखित चरणों का पालन करेंगे:
- एक मैप mp परिभाषित करें
- words में प्रत्येक शब्द it के लिए:
- ch := it[0]
- it को mp[ch] में डालें
- mn := अनंत
- mp में प्रत्येक कुंजी-मान जोड़ी it के लिए:
- str := it का मान
- size := str का आकार
- यदि size % 2 == 0, तो 1 वापस करें
- 0 वापस करें
उदाहरण
#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