TiPo Опубликовано 26 марта, 2013 Жалоба Поделиться Опубликовано 26 марта, 2013 Здравствуйте, что-то не могу решить задачу. Пишите пожалуйста предположения и советы. Но если вы напишете решение, то пожалуйста поместите его в спойлер, т.к. задачу хочу всё таки решить сам(или почти сам).Вот само условие:В давние времена Золотая Орда ежегодно собирала дань золотыми монетами. Известный крымскийхан Гирей решил схитрить: выплачивая дань из N золотых монет, он подложил среди них однуфальшивую – более легкую монету. Об этом донесли казначею Золотой Орды. Для обнаружения подделкион решил использовать магические весы, работающие на урюке.На чаши магических весов кладутся две кучи монет. Весы устанавливают, совпадает илиразличается вес этих куч. При этом, если кучи имеют разный вес, то весы указывают, какая из куч легче.При совпадении веса обеих куч весы требуют R плодов урюка, а при несовпадении – U плодов.Казначей, сам любитель урюка, хочет и фальшивую монету обнаружить, и сэкономить на урюке.Требуется написать программу, которая по заданному количеству монет N, при условии, что толькоодна из них легче других, укажет минимальное количество урюка, с помощью которого эта фальшиваямонета гарантированно будет обнаружена.Формат входных данныхВо входном файле в единственной строке находятся три целых числа N, R и U (2 ≤ N ≤ 1 000 000,1 ≤ R, U ≤ 1 000 000), где N – количество монет, R – количество плодов урюка, затрачиваемых в случаесовпадения веса куч монет, U – количество плодов урюка, затрачиваемых в случае их различия. Все числаразделены пробелом.Формат выходных данныхВыходной файл должен содержать одно число – минимальное количество урюка, с помощьюкоторого гарантированно будет обнаружена фальшивая монетаПримеры:Входные данные | Выходные данные[*:4d07042b65]4 3 1 | 2[*:4d07042b65]3 3 1 | 3[*:4d07042b65]15 2 3 | 8[*:4d07042b65]10 2 1 |3 Ссылка на комментарий
_delphin_ Опубликовано 26 марта, 2013 Жалоба Поделиться Опубликовано 26 марта, 2013 В любом случае требуется минимальное количество сравнений.При решении задачи в лоб нам понадобиться количесво взвещиваний (сложность) max = N-1. это вариант неприемлем.Улучненный вариант с делением монет на кучи. Он подходит при N>4тогда делим N div 2 и взвешиваем. сложность задачи будет max N div 2 while n>5пока все))... Ссылка на комментарий
promises Опубликовано 26 марта, 2013 Жалоба Поделиться Опубликовано 26 марта, 2013 разве N-1? мы же по 2 монеты сравнивать будем, если в лоб, вроде как получится N/2. Пока что деление пополам выглядит наиболее разумным.кстати, не совсем понял зачем дано кол-во урюка R, т.е. можно как то эту задачу решить от противного? p.s. сейчас что-то голова не особо варит, завтра еще раз гляну Ссылка на комментарий
TiPo Опубликовано 27 марта, 2013 Автор Жалоба Поделиться Опубликовано 27 марта, 2013 Кстати, я вчера "состряпал" следующее, но это решение я считаю неверным: n,r,u:integer;procedure ChetN;var Shet:integer;begin Shet:=0; repeat n:=n div 2; Shet:=Shet+u; until n=1; writeln(Shet);end;procedure NechetN;var Shet:integer;begin if n=3 then begin Shet:=u*3; writeln(Shet); exit; end; Shet:=u*2+r; writeln(Shet);end;begin readln(n,r,u); if n mod 2=0 then ChetN else NechetN; readln;end.var Ссылка на комментарий
TiPo Опубликовано 27 марта, 2013 Автор Жалоба Поделиться Опубликовано 27 марта, 2013 Если решили, то проверьте своё решение здесь: http://informatics.mccme.ru/moodle/mod/statements/view3.php?id=4908&chapterid=111223 Ссылка на комментарий
TiPo Опубликовано 27 марта, 2013 Автор Жалоба Поделиться Опубликовано 27 марта, 2013 По-моему что-то не так с нечётными числами:var n,r,u,Shet:integer;begin readln(n, r, u); Shet:=0; if n=3 then Shet:=Shet+r else repeat n:=n div 2; if n=3 then Shet:=Shet+r else Shet:=Shet+u; until n=1; writeln(Shet); readln;end. Ссылка на комментарий
ArtyomK Опубликовано 27 марта, 2013 Жалоба Поделиться Опубликовано 27 марта, 2013 Все не так тривиально)N = 10;R = 1;U = 1 000 000; Ссылка на комментарий
danger Опубликовано 29 марта, 2013 Жалоба Поделиться Опубликовано 29 марта, 2013 Стандартная задача. Ищите тернарным поиском, а не бинарным. Ссылка на комментарий
ArtyomK Опубликовано 31 марта, 2013 Жалоба Поделиться Опубликовано 31 марта, 2013 dangerРазве это решает проблему в случае с большими по сравнению с R значениями U? Ссылка на комментарий
piecemaker Опубликовано 1 апреля, 2013 Жалоба Поделиться Опубликовано 1 апреля, 2013 В бинарном всегда неравенства (за исключением нечетного множества, когда отбрасываемая единица оказывается искомой). В тернарном возможны равенства. В случае одинакового количества сравнений, если U больше R, тернарный поиск будет более эффективен. Ссылка на комментарий
ArtyomK Опубликовано 2 апреля, 2013 Жалоба Поделиться Опубликовано 2 апреля, 2013 piecemakerБолее эффективен, тут и спорить не о чем. Но задачу решить не поможет, насколько я понимаю) Потому что нужно не более эффективное решение, а самое эффективное)Да и к тому же:минимальное количество урюка, с помощью которого эта фальшиваямонета гарантированно будет обнаружена.То есть нужно брать оценку сверху. И при оценке затрат на тренарный поиск нужно рассматривать случай, когда все сравнения закончились худшим результатом. Ссылка на комментарий
piecemaker Опубликовано 2 апреля, 2013 Жалоба Поделиться Опубликовано 2 апреля, 2013 при худшем результате тернарный поиск вырождается в бинарный просто. так что, если хотя бы одно сравнение будет равное, тернарный поиск будет эффективнее. Ссылка на комментарий
_delphin_ Опубликовано 2 апреля, 2013 Жалоба Поделиться Опубликовано 2 апреля, 2013 Пока ход мыслей правильный. В зависимости от входных данных меняем метод сравнения. Ссылка на комментарий
ArtyomK Опубликовано 2 апреля, 2013 Жалоба Поделиться Опубликовано 2 апреля, 2013 Пока ход мыслей правильный. В зависимости от входных данных меняем метод сравнения.Ну так вопрос дня: как определить метод сравнения, не решая очень неприятную экстремальную задачу) Или как ее решить таки) Ссылка на комментарий
_delphin_ Опубликовано 2 апреля, 2013 Жалоба Поделиться Опубликовано 2 апреля, 2013 Тк надо будет реализовывать ОБА метода, то ответ на поверхности))) Ссылка на комментарий
Рекомендуемые сообщения
Пожалуйста, войдите, чтобы комментировать
Вы сможете оставить комментарий после входа в
Войти