Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 플레이어가 문자열을 문자별로 구성할 수 있는 게임에서 첫 번째 플레이어가 승리할 수 있는지 확인하는 프로그램

<시간/>

단어 목록이 있다고 가정합니다. 이제 두 명의 플레이어가 참여할 수 있는 유령 게임을 생각해 보십시오. 여기서 플레이어는 문자열에 문자를 번갈아 추가합니다. 그리고 만들고 있는 문자열은 목록에 있는 단어의 유효한 접두어여야 하며 목록에 있는 단어를 철자하는 플레이어는 패배합니다. 두 플레이어가 모두 최적의 플레이를 하고 있다면 첫 번째 플레이어가 이길 수 있는지 여부를 확인해야 합니다.

따라서 입력이 단어 =["manage", "manager", "min"]과 같으면 출력은 True가 됩니다.

  • m [플레이어 1]
  • 엄마 [플레이어 2]
  • 남자 [플레이어 1]
  • 마나 [플레이어 2]
  • [플레이어 1] 관리
  • [플레이어 2] 패배 관리

따라서 플레이어 1이 이깁니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • 하나의 지도 MP 정의
  • 각 단어에 대해 다음을 수행합니다.
    • ch :=그것[0]
    • mp[ch]에 삽입
  • mn :=정보
  • 각 키-값 쌍에 대해 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