Zadachi C++ - Форум
Воскресенье, 04.12.2016, 17:16
Задачи по информатике
Главная | Регистрация | Вход Приветствую Вас Гость | RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 11
Модератор форума: ignorer, KOT_B_MEIIIKE, PASCAL26, atvrider 
Форум » Решение задач по информатике » Задачи по программированию + блок-схемы » Zadachi C++ (Pomogite!!!!)
Zadachi C++
BakeДата: Четверг, 09.01.2014, 10:15 | Сообщение # 1
Рядовой
Группа: Новичок
Сообщений: 1
[ 0 ]
Статус: Offline
Srochno nado!!!!!!!!!!!!!!!!!!!!!!!!!!11
Pomogite reshit zadachu
Прикрепления: 0614083.jpg(132Kb) · 4258411.jpg(101Kb) · 6796057.jpg(90Kb)


Сообщение отредактировал 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
ну нифига себе на олимпиадах в казахстане следят, что народ условия отправляет smile прикольно ещё, что условия с ошибками в пунктуации написаны smile
несмотря на то, что олимпиада уже прошла, а пост устарел, отпишусь по поводу решения.
казалось бы, алгоритм решения довольно прост: если красных шариков нечётное число, то как бы ни пыжились оба игрока, число красных так и останется нечётным, из этого следует, что хотя бы один красный шарик останется, следовательно, в этом случае мы можем заведомо выдать ответ 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, по идее это восьмая, а на большинстве известных мне олимпиад школьного уровня задачи идут с повышением сложности (чёт я не заметил, чтобы она дюже сложной была).
 
Форум » Решение задач по информатике » Задачи по программированию + блок-схемы » Zadachi C++ (Pomogite!!!!)
Страница 1 из 11
Поиск:

Copyright MyCorp © 2016