Bake | Дата: Четверг, 09.01.2014, 10:15 | Сообщение # 1 |
Рядовой
Группа: Новичок
Сообщений: 1
[ 0 ]
Статус: Offline
| Srochno nado!!!!!!!!!!!!!!!!!!!!!!!!!!11 Pomogite reshit zadachu
Сообщение отредактировал Bake - Четверг, 09.01.2014, 10:53 |
|
| |
atvrider | Дата: Пятница, 10.01.2014, 15:49 | Сообщение # 2 |
Майор
Группа: Модераторы
Сообщений: 15
[ 2 ]
Статус: Offline
| олимпиады решай сам, если не хочешь быть дисквалифицирован
пишу на Java, С#, C++, pascal (прежний ник pascal26) p.s. если помог - поставь +
|
|
| |
ignorer | Дата: Вторник, 28.01.2014, 22:36 | Сообщение # 3 |
Генералиссимус
Группа: Модераторы
Сообщений: 602
[ 18 ]
Статус: Offline
| ну нифига себе на олимпиадах в казахстане следят, что народ условия отправляет прикольно ещё, что условия с ошибками в пунктуации написаны несмотря на то, что олимпиада уже прошла, а пост устарел, отпишусь по поводу решения. казалось бы, алгоритм решения довольно прост: если красных шариков нечётное число, то как бы ни пыжились оба игрока, число красных так и останется нечётным, из этого следует, что хотя бы один красный шарик останется, следовательно, в этом случае мы можем заведомо выдать ответ first. в связи с этим далее будем считать, что красных чётное число. итак, что представляет собой каждый ход: вытянуть два синих - то же самое, что и просто убрать один синий шарик; вытянуть два разных - то же, что и два синих; вытянуть два красных - то же, что и если бы мы убрали два красных и добавили один синий. заметим, что задача второго игрока - сделать так, чтобы на поле не осталось красных, задача синего этого не допустить. максимум, что первый игрок может для этого сделать - фактически убрать один синий шарик, таким образом надеясь увеличить свои шансы на победу. а второй в это время смело, пока это возможно, вытаскивает по 2 красных шарика на каждом ходу и добавляет по одному синему. то есть мы видим, что в любом случае количество синих падать не будет, а количество красных медленно, но верно будет снижаться (по 2 за ход обоих игроков), и это только в лучшем для первого игрока случае (в худшем ему придётся тоже тянуть красные шарики, если второй решит над ним поиздеваться и оставит без синих шаров). из этого всего следует, что если количество красных шаров чётное, то мы можем однозначно ответить на этот вопрос: second. ____________________________________ итак, подытожим: если N кратно двум, выводим SECOND, иначе FIRST.
вот код: #include <iostream>
using namespace std;
int main() { int t; int n, m; cin >> t; for (int i = 0; i < t; ++i) { cin >> n >> m; if (n % 2) cout << "FIRST\n"; else cout << "SECOND\n"; } return 0; } код написал прямо здесь, на компе не тестил, простите, если не заработает. вроде должно. странно, что эта задача носит номер H, по идее это восьмая, а на большинстве известных мне олимпиад школьного уровня задачи идут с повышением сложности (чёт я не заметил, чтобы она дюже сложной была).
|
|
| |