fork download
  1. import java.util.*;
  2. import java.io.*;
  3. import java.math.*;
  4.  
  5. class Ideone {
  6. public static void main(String args[]) {
  7. Scanner in = new Scanner(System.in);
  8. int n = in.nextInt(); //количество зерен
  9. int m = in.nextInt(); //часть, которую можно съесть за ход
  10. int[] result = new int[n-m+1]; //массив значений
  11. for(int i = 0; i < n-m+1; i++) result[i] = 0;
  12. result[0] = 1; //в позиции n = m следуте взять одно зерно и выиграть
  13. result[1] = -1; //в позиции n = m + 1 выиграть нельзя
  14. int takeToWin = 0;
  15. for(int step = m+1; step < n+1; step++){
  16. boolean good = false; //есть ли возможность перейти на выигрышную позицию из данной
  17. //проверка всех позиций, в которые можно попасть за ход
  18. for(int i = step-m; i >= ((step - step/m)-m) && !good; i--){
  19. if(result[i] == -1){ //если выигрышная позиция достижима
  20. good = true; //уведомить об этом программу
  21. takeToWin = n-m-i; //зафиксировать расстояние до позиции
  22. }
  23. }
  24. if(good) result[step-m] = 1; //если возможно, пометить позицию как выгрышную
  25. else result[step-m] = -1; //иначе - пометить как проигрышную
  26. }
  27. for(int i = 0; i < n-m+1; i++) //вывод типа позиции
  28. System.out.println(i+m+":\t"+result[i]);
  29. if(result[n-m] == 1) //вывести на экран оптимальное количество зерен на первом шаге
  30. System.out.println(takeToWin);
  31. else //или указать, что выигрышных ходов нет
  32. System.out.println(-1);
  33. }
  34. }
Success #stdin #stdout 0.14s 321344KB
stdin
10 3
stdout
3:	1
4:	1
5:	-1
6:	1
7:	1
8:	-1
9:	1
10:	1
2