Форум » Теория игр » Задача № 3074 (Е. Джобс) » Ответить

Задача № 3074 (Е. Джобс)

yaroslava: Помогите, пожалуйста, в 3 пункте. У меня выводится максимальное значение 499, хотя правильное максимальное значение 299. #include <iostream> using namespace std; int F(int s, int hod, int win) { if (s >= 1000) { return hod % 2 == win % 2; } if (hod == win) { return 0; } if ((hod + 1) % 2 == win % 2) { return F(s + 100, hod + 1, win) or F(s*2, hod + 1, win); } else { return F(s + 100, hod + 1, win) and F(s*2, hod + 1, win); } } int main() { for (int s = 1; s <= 999; ++s) { for (int win = 1; win <= 4; ++win) { if (F(s, 0, win) == 1) { if (win == 2) { cout << s << " " << win << endl; } break; } } } return 0; }

Ответов - 5

s11kai: yaroslava пишет: Помогите, пожалуйста, в 3 пункте. У меня выводится максимальное значение 499, хотя правильное максимальное значение 299. как-то так: [pre2] def g ( S ): if S >= 1000: return 0 pe = [g(S*2), g(S+100)] va = [c for c in pe if c <= 0] if va: return -max(va) + 1 else: return -max(pe) itog = [(S,g(S)) for S in range(1,1000)] print( '21 max:', max([S for S, R in itog if R == -2])) [/pre2]

alspay: Какая последовательность ходов для позиции 299? Если Петя не ошибается, то он просто +1 будет делать и Ваня не сможет выиграть за 2 хода. Если Петя ошибается, то можно взять вообще ход +1 для всех.

Ж: [pre2] Победа Вани первым ходом при ошибке Пети возможна, если в куче было не менее 250 камней, но не более 499 камней 299 --> 598 --> 1196 (победа Вани первым ходом при ошибке Пети) п в п в 299 --> 399 --> 499 --> 988 --> 1976 (победа Вани вторым ходом) п в п в 299 --> 399 --> 499 --> 599 --> 1198 (победа Вани вторым ходом) п в в 300 --> 600 --> 1200 (победа Вани первым ходом при ошибке Пети) п в п 300 --> 400 --> 800 --> 1600 (выиграет Петя) 300 --> 400 --> 500 --> 1000 (выиграет Петя) [/pre2]


alspay: 400 800 (выиграет Петя) 500 (выиграет Петя) А почему выиграет Петя, если он ошибается? Почему он не может ошибиться и сделать ход +100? Почему Петя ошибается на одних диапазонах чисел и перестает ошибаться на других? 899 --> 999 --> победа Вани первым ходом при ошибке Пети.

Ж: Я думаю, условие надо понимать так: Ваня ГАРАНТИРОВАННО выигрывает своим первым или вторым ходом, при этом для любого найденного значения у Вани есть возможность выиграть своим первым ходом (в случае ошибки Пети) И ВТОРЫМ ХОДОМ В ИНЫХ СЛУЧАЯХ 899 --> 999 --> 1998 (Победа Вани первым ходом) 899 --> 1798 (победа Пети первым ходом) Таким образом, ГАРАНТИРОВАННО выиграть Ваня не может, а ДОЛЖЕН Это условие : у Вани есть возможность выиграть своим первым ходом (в случае ошибки Пети) дано, чтобы отбраковать значения ниже 250 - из них Ваня может выиграть только вторым ходом 100 --> 200 (при любом ходе Пети) --> 400 --> 500/800 --> 1000/1600 (Ваня выигрывает только вторым ходом)



полная версия страницы