C++程序:检查首位玩家能否赢得一个逐字组成字符串的游戏


假设我们有一系列单词。现在考虑一个字谜游戏,两位玩家可以参与其中。玩家轮流向字符串添加字母。生成的字符串必须是列表中某个单词的有效前缀,拼写出列表中任何单词的玩家算输。我们必须检查如果两位玩家都采取最佳策略,首位玩家能否获胜。

因此,如果输入类似于 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 := inf
  • 对于 mp 中的每个键值对 it:
    • str := it 的值
    • size := str 的大小
    • 如果 size 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

更新于:2020年12月12日

143 次查看

开启你的职业生涯

完成课程获得认证

开始学习
广告