fork(2) download
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. int main() {
  5. int N, M, count = 0;
  6. cin>>N>>M;
  7. if ((N%2!=0)&&(M==0)) //здесь проверяется, возможно ли убить Горыныча
  8. {
  9. cout<<"-1"<<endl;// вывод "-1" в противном случае
  10. }
  11. else
  12. {
  13. while ((N>0)||(M>0)) //цикл будет выполняться до тех пор, пока существует хоть одна голова или хвост
  14. {
  15. if (M%2==1) //если хвостов нечетное количество, то посредством отрубания одного хвоста увеличиваем число их на 1
  16. {
  17. count++;// здесь и далее таким образом будет увеличиваться счетчик надрезов
  18. M++;
  19. }
  20. if ((N%2==1)&&(M>=2)) //если голов нечетное количество, то отрубая два хвоста увеличиваем количество голов на 1
  21. {
  22. M-=2;
  23. N++;
  24. count++;
  25. }
  26. if ((M%2==0)&&(N%2==0)&&((N+(M/2))%2==0)) //если число голов и хвостов четное, и если количество хвостов при делении на два дает четное число
  27. {
  28. count=count+M/2+((N+M/2)/2);//то увеличиваем счетчик надрезов
  29. N=0;
  30. M=0;//и обнуляем количество голов и хвостов для выхода их цикла
  31. }
  32. else //если не выполняется какое-либо из условий прошлого ветвления, то увеличиваем количество голов на 1
  33. {
  34. M++;
  35. count++;
  36. }
  37. }
  38. cout<<count<<endl;//выводим количество ударов
  39. }
  40. return 0;
  41. }
Success #stdin #stdout 0s 3460KB
stdin
3 0
stdout
-1