Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.school;
- import java.util.Scanner;
- public class Main {
- static int S = 0, U = 1; // Обозначения урганта и сафонова в виде индексов, как игроков
- public static int eyler(int n) { // Функция для очень быстрого вычисления эйлера(нашел в инете)
- int result = n;
- for (int i = 2; i * i <= n; ++i)
- if (n % i == 0) {
- while (n % i == 0)
- n /= i;
- result -= result / i;
- }
- if (n > 1)
- result -= result / n;
- return result;
- }
- public static int winner(int G/*число грамм*/, int state/*индекс игрока*/) { // Рекурсивное определение победителя
- if (G == 1) return state; // Если остался один грамм теста - то победитель тот кто сейчас играет
- int w1 = winner(G - 1, 1 - state); // Что будет если текущий человек походит путем переноса 1 грамма
- int w2 = winner(eyler(G), 1 - state); // Изи взбалтывания
- if ((w1 == S && w2 == U) || (w1 == U && w2 == S)) return state; // В случае если неясно кто победит - побеждает тот, чей сейчас ход
- else {
- if (w1 == U && w2 == U) return U; // Если в обоих случаях Ургант - то возвращаем урганта
- if (w1 == S && w2 == S) return S; // Если в обоих случаях не Ургант - то возмращаем его
- }
- return -1; // Чтобы джава не ругалась
- }
- public static void main(String[] args)
- {
- Scanner in = new Scanner(System.in);
- int G;
- G = in.nextInt();
- if (G == 1) { // Если один грамм мы уже знаем ответ
- System.out.println("Ivan Urgant");
- System.out.println("Draw");
- } else {
- int w1 = winner(G - 1, S); // Смотрим при каком ходе можем победить
- int w2 = winner(eyler(G), S);
- if (w1 == 1)
- {
- System.out.println("Ivan Urgant");
- System.out.println("Draw");
- }
- else
- {
- if (w2 == 1)
- {
- System.out.println("Ivan Urgant");
- System.out.println("Mix");
- } // Если не можем победить - то побеждает сафонов
- else System.out.println("Ivan Safonov");
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement