- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
// Задача "Сложный XOR", олимпиада ACM контестер Украина.
// Есть множество натуральных чисел от 0 до N. Играют двое игроков. Сначала один убирает из множества число,
// потом второй. Если в множестве есть (осталось) число, равное побитовому XOR двух выбранных чисел, убирают
// и его (в условии задачи битность числа не указана, но сказано, что 1 <= N <= 32). Играют пока в множестве
// есть числа. Проигрывает тот, который не может совершить ход (на ком кончились числа).
// Ввод - число N, вывод - игрок, который выиграл (оба игрока придерживаются выгодной стратегии).
#include <iostream>
#include <time.h>
using namespace std;
int main() {
int n;
cin >> n;
// Это очевидно
if (n==1) {
cout << "First";
return 0;
}
if (n==2) {
cout << "Second";
return 0;
}
// Это было в примере
if (n==3) {
cout << "First";
return 0;
}
int s = clock() % 2; // rand() не работал чето :)
if (s==0) {
cout << "First";
} else {
cout << "Second";
}
return 0;
}
nur 17.04.2011 01:34 # +6
guest 17.04.2011 02:38 # +3
rat4 17.04.2011 09:13 # +2
Но нас не остановить!
guest 17.04.2011 10:22 # +2
<cstdlib> же!
rat4 17.04.2011 12:44 # +1
Lure Of Chaos 17.04.2011 12:07 # +2
в такую игру не интересно играть, следовательно - и программировать это г.
daemon_master 17.04.2011 14:19 # 0
Actine 17.04.2011 16:39 # 0
1. невзлюбил такие олимпиады потому что залог успеха в них - не творческое мышление, а заучивание книжек с алгоритмами (которые были придуманны еще в эпоху перфокарточек (чтобы меньше оных надо было) или вообще счета в столбец). Школьники и некоторые студенты, в меру непонимания, что такое тру-программирование, с удовольствием выстукивают эти задачи на паскале (да-да, паскаль обязателен, не факт что задачи, скомпиленные на си, выдадут результат, сопоставим с эталонным в тестах) с чувством особо
2.
Actine 17.04.2011 16:56 # +8
отвечу всем и много. накипело, извините.
Я как раз и невзлюбил такие олимпиады, потому что залог успеха в них - не творческое мышление, а заучивание книжек с алгоритмами (которые, к слову, были придуманны еще в эпоху перфокарточек (чтобы меньше оных надо было) или вообще счета в столбец). Школьники и некоторые студенты, в меру непонимания, что такое тру-программирование, с удовольствием выстукивают эти задачи на паскале (да-да, турбо(!)паскаль обязателен, не факт что задачи, скомпиленные на си, выдадут результат, сопоставим с эталонным в тестах) да еще с чувством особой элитарности.
Я больше скажу. Большинство этих задач подразумевает написание двух-трех строчек vip-кода (анти-говнокода :) с какой-то бешенной рекурсией и на одной формуле, с которых ничего не очевидно, но зато оно укладывается и в лимит времени, и памяти. К слову, эти синтетические лимиты на то и придуманны, чтобы задача решалась единственным шаблонным способом. Все делается на скорость, так что обычно все пишется в main, верх крутизны - в отдельную функцию в глобальном нэймспейсе. Я сам на этих олимпиадах в школе сидел и должен был год после них лечиться нормальными языками (вообще не признавал ООП).
Насчет <cstdlib> и <ctime>... не знал, не сишник я, но писать на турбопаскале это убого :)
А дело здесь, да, либо в невероятном везении, либо в том, что авторы сами не знали решения и сделали тесты только на первые три значения. Мы ничего не выиграли (да и пришли просто постебаться, что удалось); если бы жюри посмотрело решения, им было бы о чем задуматься.
guest 17.04.2011 17:14 # −8
после них лечиться нормальными экскрементами (вообще не признавал копрофагию)
Lure Of Chaos 17.04.2011 20:29 # +1
пардон, как алгоритм зависит от ЯП? если прога на Си выдает не тот результат, что прога на Паскале - очевидно, что вы реализовали разные алгоритмы.
а требование к ЯП на олимпиадах, это всего-то затем, что бы:
1. экзаменаторы, знающие только этот ЯП, поняли программу
2. все конкурсанты были бы поставлены в равные условия (например, вдруг вы воспользуетесь стандартной библой другого языка и поэтому, естественно, покажете лучшие результаты)
Actine 17.04.2011 22:53 # 0
а об стандартных библиотеках, считается, участник вообще не должен догадываться. если в задаче написано - дано n целых чисел (1 <= n <= 100000, n разный от задачи до задачи), то участник должен сделать массив из 100000 интов (вместо списков, векторов...) Нет, оно не запрещено парсером, просто предполагается, что предел уровня участника - это ввод и вывод в std, написание метода и рекурсия. Зато зубрежка > мастерство. Изящное (книжное) решение приветствуется.
Короче говоря, олимпиады с алгоритмического программирования имеют очень мало общего с настоящим программированием. Очень жаль, что школьники, будучи уверенными и накормленными обещаниями, мол, это престижно и вы станете венцом программерской элиты, верят и тратят время на изучение всего того, что давно скрыто в движках и стандартных библиотеках (поиск пути, сортировка...), в то же время стараясь сделать программу побыстрее а не читабельнее, порождая тонны вип-кода. а еще хуже, что этим занимаются взрослые люди (которые, наверное, не смогли освоить современные подходы к программированию, или не могут смириться со стремительным повышением уровня абстракции программ). Надеюсь, у Вас там олимпиады лучше.
Lure Of Chaos 17.04.2011 23:13 # +8
Вот так приходится делать компромисс между хорошим кодом (попутно регулируя степень тщательности проектирования) и собственной репутацией.
Извините, тоже накипело.
ctm 18.04.2011 12:26 # +4
управленец при принятии решения руководствуется в основном затратами на разработку - их нужно минимизировать ("быстрее, быстрее"), т.к. от этого зависит его доход. будущее проекта - ну это ж будет когда-нибудь - типа там и посмотрим - может и так нормально будет, и вообще это проблема программистов - пусть они и думают.
Lure Of Chaos 18.04.2011 13:28 # +6
ctm 18.04.2011 12:20 # +2
как вообще можно сравнить участников, имея в распоряжении всего-лишь 6-8 часов?
отсюда и получаем задания, рассчитанные на 1-2 часа работы.
В производстве ПО цель совсем иная - не понять кто круче, а использовать все ресурсы (в смысле весь штат программистов) оптимальным образом.
Соответственно, опыт олимпиад мало годится для производства ПО.
Back 18.04.2011 12:44 # −3
Actine 18.04.2011 14:55 # +1
согласитесь же, знание исторических алгоритмов не поможет, если нужно реализовать класс для обмена сообщениями через xmpp, ну или даже регистрацию пользователей на сайте.
gegMOPO4 18.04.2011 15:06 # 0
Actine 18.04.2011 15:46 # 0
ctm 18.04.2011 15:06 # 0
ctm 18.04.2011 15:05 # +1
а что верить - не верить - это известный факт.
Actine 17.04.2011 23:00 # +1
Lure Of Chaos 17.04.2011 23:18 # +4
DoctorHouse 18.04.2011 08:45 # 0
poweroff; sleep 5; poweron &
???
Back 18.04.2011 09:13 # +4
Lure Of Chaos 18.04.2011 11:06 # 0
Back 18.04.2011 12:06 # −1
Lure Of Chaos 18.04.2011 13:15 # 0
bugmenot 18.04.2011 13:20 # +2
тёлки и всё такое
Lure Of Chaos 18.04.2011 13:31 # +2
istem 19.04.2011 03:54 # 0
bugmenot 18.04.2011 11:40 # +4
программирование в длину
программирование в ширину
с шайбой, с мячом, тысячи их!
Lure Of Chaos 18.04.2011 13:14 # 0
absolut 18.04.2011 13:37 # 0
Lure Of Chaos 18.04.2011 13:42 # 0
bugmenot 18.04.2011 14:08 # 0
Lure Of Chaos 18.04.2011 14:13 # 0
Actine 18.04.2011 14:59 # −1
Мышление - оно есть первые несколько раз. Дальше задачи повторяются. Когда в школе, или на первых курсах, особо нечего делать было, конечно, для развития было интересно походить. причем не готовясь - что смог, то решил. и занимал в общем-то хорошие места.
Алгоритмы... думал, где же они применяются в явном виде. Максимум - навигационное ПО. А так, оно давно реализованно все. ХХЫ-век, энкапсуляция :)
eth0 18.04.2011 09:29 # −1
TarasB 18.04.2011 09:44 # +4
Back 18.04.2011 10:23 # −1
Actine 18.04.2011 15:17 # 0
Немного не в тему, но... Перед собственно олимпиадой идет выступление организаторов. Выходит на трибуну чел, который тоже занял золото в ЧМ этого АСМ-а (работает организатором олимпиад в регионе), так вот, выходит он и пишет на доске: Google Code Jam - $15000; Russian _какой-то_ Cup - $10000; _еще_какая_то_олимпа_ - $15000. на что его спрашивают, а АСМ сколько дает?
Ответ был шедевральным: "АСМ ничего не дает. АСМ это престиж."
Back 18.04.2011 18:03 # +1
AxisPod 18.04.2011 12:47 # 0
Back 18.04.2011 12:49 # 0
TarasB 18.04.2011 13:19 # +1
Actine 18.04.2011 15:07 # −1
Или задача - дано число n, вычислить, во сколько бит оно поместится. пишу ceil(ln(n)/ln(2)) - валится. из-за точности флоата, как потом сказали. эталонное решение - перебор!
ctm 19.04.2011 06:28 # +1
for(r = 0; n > 0; r ++) n = n >> 1;
какой тут перебор?
Actine 19.04.2011 17:51 # −2
когда я спросил координатора, тоже одного из тех продвинутых организаторов, почему с логарифмами падает, он сам посоветовал делать перебором. сработало даже.
а со сдвигом отличное решение. не допер.
Back 20.04.2011 09:18 # 0
gegMOPO4 18.04.2011 15:11 # +3
TarasB 18.04.2011 15:38 # 0
gegMOPO4 18.04.2011 19:34 # 0
TarasB 18.04.2011 21:57 # 0
Да.
> Вот это и есть засветка одного тестового варианта.
И что? В реале тоже тестер будет говорить "программа валится, а где - светить не буду".
> А про остальные вы что хотите узнать?
Если вариант ничем не выделяется, то так и написать - "неверный ответ на типичном тесте". Чтобы ответ был похож на реакцию тестера в реальной жизни.
Actine 18.04.2011 15:44 # 0
Про rand() нам тоже говорили, правда, сказали, может проканать раза с десятого. Мы не верили... )
Back 18.04.2011 18:07 # 0
gegMOPO4 18.04.2011 19:45 # 0
Back 18.04.2011 18:05 # 0
gegMOPO4 18.04.2011 19:40 # 0
Вот как раз учёт граничных и вырожденных случаев — то, что близко к реальным задачам. Потому, что программа может работать на определённом тестовом наборе и сломаться на других реальных данных. Нужно не надеяться на авось, а иметь некоторые гарантии насчёт худшего случая (а худшие случаи не так редки, как кажется).
burdakovd 18.04.2011 21:59 # +1
А тут - есть тесты, можно проверять на них наличие ошибок. А для отладки - уж будьте любезны свой тест написать. Может вам тестер ещё и патч должен прислать с исправлением ошибки?
ctm 19.04.2011 06:25 # 0
так вот наша реализация не прошла ни одного теста, но по результатам апелляции нам дали полный балл за эту задачу - мы лишь перепутали вывод 0 и 1. а в задаче не было конкретизировано. Автор задачи решил, что она решена полностью.
Очень многое зависит от организаторов олимпиад.
Actine 18.04.2011 15:13 # −2
А вообще, пора наверное прекращать нашу здесь специальную олимпиаду в комментариях =) Разные и, главное, личные взгляды - это хорошо.
guest 19.04.2011 12:48 # 0
int s = clock() % 2;
делала то, что s всегда было равное 0. Ваш код оказался верным. Он говорит всегда что выиграл второй кроме случая n==1 и n==3. Совпадение.
Помоему контест был неплохой, и там был мнoго разноплновых задач, интересних задач, видемо благодаря тому, что готовила контест топовая команда с Симферополя AKAI. Это была одна из самых простых задач на заметить закономерность, догадатся.
Вопрос к автору: и сколько задач вы решили с 15 что там были за 5 часов?
Это задача была дана чтобы с 158 команд(у моем регионе) 28 не поехали домой с 0 из 15 решенных задач. Но даже с такой задачей это случилось. вот пруфлинк http://olymp.sumdu.edu.ua/standings.php.
П.С. это была задача N. ее решили 7 команд. задумайтесь лучше о уровне преподавания программирования в наших университетах.
bugmenot 19.04.2011 12:53 # 0
ступидент детектед
Actine 19.04.2011 16:10 # −1
Как я уже говорил, я не ставил себе цель подготовиться к олимпиаде. Я пришел и увидел, что в алгоритмическом я ноль, в чем охотно признаюсь. Тем не менее, сейчас соображаю над неплохим, на мой взгляд, проектом, и незнание олимпиадных мне как-то не мешает.
Насчет перебора. Вы перебрали все 32 варианта? И сколько времени это заняло? Или вы наперед знали, какие подходы к подобным задачам? Я руками проверил вариант 4 и решил, что зависит от четности (как в Простом ХОR'e). Для того, чтобы проследить такую закономерность, нужно перебрать хотя бы половину значений.
Встречный вопрос (не из злости, просто не ожидал здесь напороться на участника :). А сколько решили вы? И на каком языке писали?
Насчет уровня. Нам, если на то пошло, не обязаны объяснять алгоритмы олимпиадных задачек. У нас на первом курсе было какое-никакое, а все же ООП, а в начале второго мы индивидуально писали веб-порталы (тоже, какие-никакие, но писали, и это лично мне принесло больше пользы). (Нет, конечно, смешно, что после этого на третьем курсе нам будут читать школоbundle - "вёрд", эксель и фотошоп)
P.S. Ну так если у нас получился define clock() 0, то теперь листинг 6381 становится тру-говнокодом :)
Back 20.04.2011 09:23 # 0
bugmenot 20.04.2011 09:55 # 0
уже здесь появлялся, говноусловия допускали решение брутом, что вобщем-то и не удивительно, т.к.:
"Генеральный спонсор — ВКонтакте"
guest 21.04.2011 04:04 # +2
Back 21.04.2011 06:15 # +1