Advertisement
knyazer

Untitled

Oct 22nd, 2019
173
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.79 KB | None | 0 0
  1. package com.school;
  2.  
  3. import java.util.Scanner;
  4.  
  5. public class Main {
  6.     static int S = 0, U = 1; // Обозначения урганта и сафонова в виде индексов, как игроков
  7.  
  8.     public static int eyler(int n) { // Функция для очень быстрого вычисления эйлера(нашел в инете)
  9.         int result = n;
  10.         for (int i = 2; i * i <= n; ++i)
  11.         if (n % i == 0) {
  12.             while (n % i == 0)
  13.                 n /= i;
  14.             result -= result / i;
  15.         }
  16.         if (n > 1)
  17.             result -= result / n;
  18.         return result;
  19.     }
  20.  
  21.     public static int winner(int G/*число грамм*/, int state/*индекс игрока*/) { // Рекурсивное определение победителя
  22.         if (G == 1) return state; // Если остался один грамм теста - то победитель тот кто сейчас играет
  23.  
  24.         int w1 = winner(G - 1, 1 - state); // Что будет если текущий человек походит путем переноса 1 грамма
  25.         int w2 = winner(eyler(G), 1 - state); // Изи взбалтывания
  26.         if ((w1 == S && w2 == U) || (w1 == U && w2 == S)) return state; // В случае если неясно кто победит - побеждает тот, чей сейчас ход
  27.         else {
  28.             if (w1 == U && w2 == U) return U; // Если в обоих случаях Ургант - то возвращаем урганта
  29.             if (w1 == S && w2 == S) return S; // Если в обоих случаях не Ургант - то возмращаем его
  30.         }
  31.  
  32.         return -1; // Чтобы джава не ругалась
  33.     }
  34.  
  35.     public static void main(String[] args)
  36.     {
  37.         Scanner in = new Scanner(System.in);
  38.  
  39.         int G;
  40.  
  41.         G = in.nextInt();
  42.  
  43.         if (G == 1) { // Если один грамм мы уже знаем ответ
  44.             System.out.println("Ivan Urgant");
  45.             System.out.println("Draw");
  46.         } else {
  47.  
  48.             int w1 = winner(G - 1, S); // Смотрим при каком ходе можем победить
  49.             int w2 = winner(eyler(G), S);
  50.  
  51.             if (w1 == 1)
  52.             {
  53.                 System.out.println("Ivan Urgant");
  54.                 System.out.println("Draw");
  55.             }
  56.             else
  57.                 {
  58.                 if (w2 == 1)
  59.                 {
  60.                     System.out.println("Ivan Urgant");
  61.                     System.out.println("Mix");
  62.                 } // Если не можем победить - то побеждает сафонов
  63.                 else System.out.println("Ivan Safonov");
  64.             }
  65.         }
  66.     }
  67. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement