Advertisement
scottish_esquire

Задача № 1. Игра НИМ (для 2 кучек).

Apr 28th, 2022
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.40 KB | None | 0 0
  1. #include<iostream>
  2. #include<vector>
  3.  
  4. // Задача № 1. Игра НИМ (для 2 кучек)
  5. // B игре НИМ имеется несколько (2) кучек камней.
  6. // В свой ход разрешается взять любое положительное количество камней из одной кучки. Кто не может сделать ход, тот проиграл.
  7. // Первый ход делает первый игрок (Mr First)
  8. // Ваша задача вывести победителя при оптимальной игре обоих игроков (Mr First и Mr Second).
  9.  
  10. // Решаем через динамическое программирование.
  11. // Мы создадим таблицу размера куч и будем отмечать в ячейке v[i][j] (i, j = кол-во камней в 1 и 2 кучах соответственно)
  12. // 0 - если игрок, находящийся в ней проигрывает
  13. // 1 - если игрок, находящийся в ней побеждает
  14. // При этом все игроки играют оптимально (по-умному).
  15.  
  16. int main () {
  17.     int n, m;
  18.     std::cin >> n >> m; // n, m - кол-во камней в 1 и 2 кучах соответственно.
  19.     std::vector<std::vector<int>> v(n + 1, std::vector<int>(m + 1, 0));
  20.     for (auto i = 0; i < n + 1; i++) {
  21.         for (auto j = 0; j < m + 1; j++) {
  22.             for (auto x = 0; x < i; x++) {
  23.                 if (v[x][j] == 0) {
  24.                     v[i][j] = 1; // Если мы можем перевести игрока в проигрыш, убрав несколько камней из 1 кучи, то значит мы побеждаем.
  25.                     break;
  26.                 }
  27.             }
  28.             for (auto y = 0; y < j; y++) {
  29.                 if (v[i][y] == 0) {
  30.                     v[i][j] = 1; // Если мы можем перевести игрока в проигрыш, убрав несколько камней из 2 кучи, то значит мы побеждаем.
  31.                     break;
  32.                 }
  33.             }
  34.         }
  35.     }
  36.     if (v[n][m] == 0) {
  37.         std::cout << "Second" << std::endl; // Наш победитель - Mr Second!
  38.     } else {
  39.         std::cout << "First" << std::endl; // Наш победитель - Mr First!
  40.     }
  41. }
  42.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement