В последнее время было много непониманий и недовольств текущей системой подсчета очков в соревнованиях и рейтинга, и я постараюсь предложить варианты решения этой проблемы.
Вначале о рейтинге. Сейчас на Codeforces видна инфляция, во всяком случае, мне видна. Это происходит из-за большого количества участников, сыгравших один-два контеста и больше не появлявшихся.
Рассмотрим подробнее: сейчас у нас новый участник неявно получает рейтинг 1500. Как правило, новичков регистрируется гораздо больше, чем опытных программистов, поэтому на первом же своем контесте этот рейтинг сливается. А так как средний рейтинг неизменен, эти очки достаются верхней половине. Если так будет продолжаться, то через пару лет все, кому не лень, станут красными.
Есть такое предложение:
1) Рейтинг у участника появляется только после написания им 5 контестов.
2) Начальный рейтинг участника при этом не полагается 1500. Вместо этого для каждого из первых пяти контестов будем считать для него такой рейтинг, что, обладая им, он не изменил бы его по результатам соревнования.
3) Как только пять контестов пройдет, рейтинг участника становится равным среднему арифметическому пяти чисел, полученных в п.2.
4) При этом при подсчете рейтинга для участников, уже имеющих рейтинг, новички учитываться не должны.
Какие особенности у этой системы: средний рейтинг не будет постоянным. Зато каждый участник получит в результате рейтинг, почти идеально соответствующий его уровню.
Далее, странно, что, скажем, в турнире Manthan последние места слили всего около 50 очков рейтинга. Вот мои мысли об этом.
Рейтинг Эло вроде как из шахмат украден, поэтому почему бы не представить таблицу контеста как таблицу кругового турнира по шахматам? Примем, что участник A обыграл участника B, если он набрал больше очков, и посчитаем рейтинг по всем таким "партиям". При этом коэффициент изменения должен быть очень небольшим, ведь в контестах участвуют более 1000 участников.
Есть ощущение, что текущий расчет ведется как-то по-иному, потому что при описанной выше "шахматной" системе слив рейтинга последним местом должен быть довольно существенным - ведь он проиграл всем, вообще всем, в то время как в соперниках было около 200 участников, равных ему по силам!
Теперь о самом наболевшем: конечно же, о взломах.
Конечно же, если претесты делать покрывающими все мыслимые случаи, то от взломов ничего не останется, и контесты превратятся в ACM. Так что, как и претесты нужны почти полные (это пожелание авторам), нужна и возможность взломов. Но, если посмотреть на результаты последних раундов, то можно увидеть участников, заработавших более 3000 очков на взломах (при этом в последнем контесте задача A, на мой взгляд, была достаточно хорошей). Напомню, что суммарная стоимость задач - 7500. Не кажутся ли вам эти цифры немного несопоставимы? Решаешь на первых минутах A и B, делаешь 30 взломов = почти 4500 очков и ты примерно в топ-20! А если решать все задачи, то, скорее всего, получишь даже меньше, ведь стоимость то убывает.
Я сам на Manthan-е отправил задачу A на 8 минуте, заблокировал, т.к. мои первоначальные тесты она проходила. Потом, минут через 10, я неожиданно понял, что отправил фигню! Открыл комнату и набрал 1000 очков. А стоимость задачки - 500. Ошибся, не сдал задачу, а в итоге набрал на этом в 2 раза больше очков. Не слишком это честно, что-ли.
Все-таки надо что-то менять. Почему-то лучшим выходом мне видится изменение очков за взломы. Тут есть сразу несколько предложений, которые вполне можно и объединить. Они были высказаны уже давно, а я их тут просто объединю.
1) Изменить очки в зависимости от стоимости задачи (сам я проголосую за этот пункт). Например, за удачные взломы по задачам A,B,C,D,Е давать 40, 60, 80, 100, 120 баллов. По-моему, такой подсчет достаточно корректен: 1200 очков за 30 взломов по задаче A вроде бы нормальный результат (30 взломов набирает 1-2 человека за контест), в отличие от 3000 очков. Хочешь получать по 100 баллов - а реши-ка ты сначала задачу D!
2) Уменьшать очки по мере увеличения числа взломов. Например, за первый взлом давать 100% от номинала, за второй - 90%, ......, за десятый и последующие - 10%. Здесь первые взломы будут неплохо поднимать вас вверх в таблице, а последующие - не очень сильно. Получится "поломал сам - дай поломать другим". Или "не дай поломать другим, но получи от этого мало очков". И выбираем, что выгоднее.
3) Изменять количество очков в зависимости от цвета/разности рейтинга. Скажем, за взлом своего цвета давать 100% очков, соседних сверху и снизу - 120% и 80% и т.д.
Или в зависимости от рейтинга: очки = номинал * (1 + (чужой_рейтинг - твой_рейтинг) / 1000).
Что будет: 1500 ломает 2000, получает 150% очков, 1900 ломает 1400 - получает 50% очков. Надо будет еще как-то правильно отнормировать эту формулу, но вообще это смотрится неплохо.
Вначале о рейтинге. Сейчас на Codeforces видна инфляция, во всяком случае, мне видна. Это происходит из-за большого количества участников, сыгравших один-два контеста и больше не появлявшихся.
Рассмотрим подробнее: сейчас у нас новый участник неявно получает рейтинг 1500. Как правило, новичков регистрируется гораздо больше, чем опытных программистов, поэтому на первом же своем контесте этот рейтинг сливается. А так как средний рейтинг неизменен, эти очки достаются верхней половине. Если так будет продолжаться, то через пару лет все, кому не лень, станут красными.
Есть такое предложение:
1) Рейтинг у участника появляется только после написания им 5 контестов.
2) Начальный рейтинг участника при этом не полагается 1500. Вместо этого для каждого из первых пяти контестов будем считать для него такой рейтинг, что, обладая им, он не изменил бы его по результатам соревнования.
3) Как только пять контестов пройдет, рейтинг участника становится равным среднему арифметическому пяти чисел, полученных в п.2.
4) При этом при подсчете рейтинга для участников, уже имеющих рейтинг, новички учитываться не должны.
Какие особенности у этой системы: средний рейтинг не будет постоянным. Зато каждый участник получит в результате рейтинг, почти идеально соответствующий его уровню.
Далее, странно, что, скажем, в турнире Manthan последние места слили всего около 50 очков рейтинга. Вот мои мысли об этом.
Рейтинг Эло вроде как из шахмат украден, поэтому почему бы не представить таблицу контеста как таблицу кругового турнира по шахматам? Примем, что участник A обыграл участника B, если он набрал больше очков, и посчитаем рейтинг по всем таким "партиям". При этом коэффициент изменения должен быть очень небольшим, ведь в контестах участвуют более 1000 участников.
Есть ощущение, что текущий расчет ведется как-то по-иному, потому что при описанной выше "шахматной" системе слив рейтинга последним местом должен быть довольно существенным - ведь он проиграл всем, вообще всем, в то время как в соперниках было около 200 участников, равных ему по силам!
Теперь о самом наболевшем: конечно же, о взломах.
Конечно же, если претесты делать покрывающими все мыслимые случаи, то от взломов ничего не останется, и контесты превратятся в ACM. Так что, как и претесты нужны почти полные (это пожелание авторам), нужна и возможность взломов. Но, если посмотреть на результаты последних раундов, то можно увидеть участников, заработавших более 3000 очков на взломах (при этом в последнем контесте задача A, на мой взгляд, была достаточно хорошей). Напомню, что суммарная стоимость задач - 7500. Не кажутся ли вам эти цифры немного несопоставимы? Решаешь на первых минутах A и B, делаешь 30 взломов = почти 4500 очков и ты примерно в топ-20! А если решать все задачи, то, скорее всего, получишь даже меньше, ведь стоимость то убывает.
Я сам на Manthan-е отправил задачу A на 8 минуте, заблокировал, т.к. мои первоначальные тесты она проходила. Потом, минут через 10, я неожиданно понял, что отправил фигню! Открыл комнату и набрал 1000 очков. А стоимость задачки - 500. Ошибся, не сдал задачу, а в итоге набрал на этом в 2 раза больше очков. Не слишком это честно, что-ли.
Все-таки надо что-то менять. Почему-то лучшим выходом мне видится изменение очков за взломы. Тут есть сразу несколько предложений, которые вполне можно и объединить. Они были высказаны уже давно, а я их тут просто объединю.
1) Изменить очки в зависимости от стоимости задачи (сам я проголосую за этот пункт). Например, за удачные взломы по задачам A,B,C,D,Е давать 40, 60, 80, 100, 120 баллов. По-моему, такой подсчет достаточно корректен: 1200 очков за 30 взломов по задаче A вроде бы нормальный результат (30 взломов набирает 1-2 человека за контест), в отличие от 3000 очков. Хочешь получать по 100 баллов - а реши-ка ты сначала задачу D!
2) Уменьшать очки по мере увеличения числа взломов. Например, за первый взлом давать 100% от номинала, за второй - 90%, ......, за десятый и последующие - 10%. Здесь первые взломы будут неплохо поднимать вас вверх в таблице, а последующие - не очень сильно. Получится "поломал сам - дай поломать другим". Или "не дай поломать другим, но получи от этого мало очков". И выбираем, что выгоднее.
3) Изменять количество очков в зависимости от цвета/разности рейтинга. Скажем, за взлом своего цвета давать 100% очков, соседних сверху и снизу - 120% и 80% и т.д.
Или в зависимости от рейтинга: очки = номинал * (1 + (чужой_рейтинг - твой_рейтинг) / 1000).
Что будет: 1500 ломает 2000, получает 150% очков, 1900 ломает 1400 - получает 50% очков. Надо будет еще как-то правильно отнормировать эту формулу, но вообще это смотрится неплохо.
Вы так уверены? :-)
> Но никак не выводить участника с 2 задачами вперед участника с 3 задачами.
1) 2500 + 2000 > 500 + 100 + 1500
2) 320 + 640 + 960 < 800 + 1200
Пожалуйста. :-) И никаких взломов.
> 2) 320 + 640 + 960 < 800 + 1200
Прецедент в студию!
1) http://codeforces.me/contest/67/standings
Хотя вот и по канону. :3
http://codeforces.me/contest/41/standings?switchOutOfCompetition=true&outOfCompetition=on
2) http://codeforces.me/contest/66/standings
Ну тут прямо.. ммм! И даже сделанные взломы дают +0 профита, так что картину не портят. ;)
широкоширокоширокоширокоширокоширокоширокоширокоширокошироко
Прецеденты есть. Всё ещё будете бороться со взломами?
Вам так важен рейтинг?
Опыт - ничто, график ретинга - всё? :)
Просто хочется, чтобы результаты соревнований и рейтинг как можно точнее отражали навыки олимпиадного программирования.
Сейчас это не совсем так: рейтинг считается очень странно, а несбалансированные очки за взломы позволяют подняться высоко вверх тем, кому там не место.
> тем, кому там не место
ага, ага, фиолетовым и синим)
Да не парьтесь вы по поводу ретинга) Решайте лучше и быстрее и всё)
Может ещё пожаловаться, что я вот задачу то почти решил, но из-за эпсилонов/константы/неведомой ерунды она не прошла системные тесты и я опустился в рейтинге :(((( пичалька, это не честно! Даёшь полные тесты сразу, я же решил задачу!
Интересно узнать мнение большого начальника по этому поводу. Всё-таки посты к нему в большинстве направлены.
Хм, сама система взломов - это охота. Рост прибыли и аукционные гонки только увеличат фан, кто хочет решать - пусть решает.
Вообще взломы не должны давать слишком много, с другой стороны они должны быть ради фана - рост бонуса от времени обеспечит и то, и другое.
Дело не в количестве взломов, а в том, что за первые 15 минут можно обеспечить себе очень приличный конечный результат, а своим сокомнатникам и не оставить чего ломать. И те, кто решают, оказываются в невыгодной ситуации.
Поэтому, я и предлагаю самый простой выход: несколько сдвинуть начало challenge-фазы от начала контеста. Чтобы сначала все решали, а потом уже в конкурентной среде взламывали.
UPD. Да еще надо посмотреть, что он такого "нашел". Что результат не лезет в int, что на максимальном тесте не проходит N^2 ?
Сейчас, сдав задачу, я решаю для себя, не заблокировать ли какую-то из сданных и не посмотреть ли по ней все имеющиеся на этот момент решения. Конечно, количество блоков и взломов по ней, а также степень уверенности в собственном решении влияют на выбор. Разве плохо, что приходится такой выбор делать?
Идея открывать взломы только после какого-то момента мне кажется неправильной. Сейчас, сдав задачу раньше, я обеспечиваю себе преимущество в том, что и ломать могу раньше. Время начала взломов у каждого участника своё, зависящее от умения (или неумения :) ) решать задачи. А если все начнут ломать одновременно (как на ТопКодере), на результат сильнее, чем сейчас, будет влиять всякая фигня типа скорости инета и как раз слабее — способность взлома и умение решать задачи.
Главное чтобы не было таких ситуаций, что человек сдал 1-2 задачи за 20 мин, а потом сидел жал тупо F5 каждые 10 секунд до конца контеста и отлавливал явно неверные решения, которые почему то прошли претесты. То есть он как-бы работал, взламывал и заслужил за труд высокий рейтинг?
Поэтому и предлагают либо уменьшить очки за взломы, либо разделить участников разных дивизионов, либо усложнить претесты - есть много вариантов.
=)
А причем здесь это? На топкодере тоже важен как скилл решения задач, так и скилл ловить баги. Но там можно сказать, что выигрывает тот, кто хорошо решает и/или хорошо ловит баги. А здесь выигрывает тот, кто обладает навыком понимания что выгодно в данный момент делать, решать или искать баги.
Этот "навык" абсолютно бесполезен в реальной жизни. И более того, тут довольно много зависит от везения. Так вопрос, зачем это нужно? Насколько я понимаю, это не зачем не нужно, просто изначально хотелось как-то дистанцироваться от топкодера и был выбран такой вариант.
Мне кажется, что различий между КФ и ТК и так хватает и надо бы сделать по-нормальному и разделить фазы кодинга и тестирования.
Можно привести очень много примеров, когда в ACM-контесте при смене стратегии на более подходящую у команды было бы как минимум на одну задачу больше.
Это совсем не аргумент. Если полезно что-то общее, то отсюда никак не следует, что частное из того общего хоть как-то полезно.
Ну а про ACM, так там вообще кодинг и "взлом" идет параллельно. Распечатал и сиди взламывай, а товарищ пусть кодит.
2) Я про то, что я уже предлагал неделю назад убывающую стоимость взломов. :)
3) Про икспу абсолютно согласен. Ну ещё возможно ради фана стоит тут соревноваться. :)
1. Разделить дивизионы
Тогда новички не будут влиять на рейтинг первого дивизаона, что конечно более честно.
Как именно разделить не столь важно. Можно делать контест не рейтинговым для второго дива,
можно разбрасывать по разным комнатам дивизионы и для второго давать только задачи A, B, C.
Идеально конечно дать столько же задач, но других, но это видимо слишком напряжно для авторов контеста.
2. Ограничить очки взлома по каждой задаче сверху теми очками которые человек получит в случае если он пройдет финальные тесты. Т.е засабмитил первую задачу на 425 очков, и соответственно за взломы по ней получишь максимум столько же. А когда получил уже столько, то не давать даже смотреть чужие исходники по ней.
А во 2 диве кто больше 1650 почему-то можно участвовать только вне конкурса, несправедливо)
Мне честно говоря не нравится такое разделение на дивизионы как сейчас. Я уже раньше предлагал отделить участников 1 и 2 дива. Пусть для 2 дива будет привилегией участие в 1 диве и стимулом для развития.
если просто тренировка, то к чему?
>Бороться за "тренировку"?
это не нужно, есть архивы задач
Кстати, если брать какие-либо виды спорта, то участники разных дивизионов выступают раздельно
Тоже интересная позиция...
Вот как раз участие второго дивизиона вместе в первым и дает стимул тянуться за игроками более высокого класса. Игроки второго дива в реальном времени могут наблюдать насколько быстрее и профессиональнее действуют игроки первого... это тоже не плохой стимул.
Право учиться тоже надо заслужить! ]:->
(Но это уже из серии the truest of the true, так в реальности, к сожалению, очень редко бывает.)
На вашем примере: если вы набираете хотя бы 1 очко то теряете возможность участия во 2 диве в зачет
"Право учиться тоже надо заслужить! ]:->"--образование в России вроде бесплатное)))
А вообще на нашем факультете это как-то так в большинстве случаев выглядит: задача преподавателя - с минимумом запарки поставить всем зачёт по посещаемости или хотя бы по посещаемости зачёта; задача студента - на это не поддаваться и на занятиях хитрыми наводящими провокационными вопросами извлекать из преподавателя ценную информацию.
P.S. Да, по поводу среднего образования. Вот тут, ИМХО, лучше даже не брать деньги с родителей (ибо ребёнок-то сам заработать пока не может), а предоставлять как бы кредит: потом с этим образованием пойдёт он работать, вот и пусть со школой расплатится, а если не сможет - применить к нему какие-то штрафные санкции.
Во 2 диве разделение по дивизионам, то есть по разным комнатам.
Я за разделение и в первом. Сейчас топы анализируют коды новичков и тыкают их носом. Это бессмысленная трата времени для них.
Всё честно. Ты ведь разобрался в чём ошибка и другим "разсказал". Лично я благодарен тем, кто мои решения иногда ломает. Это даёт мне информацию, что в решении есть ошибка, которую я обычно нахожу, после чего решение проходит полные тесты.
б) всю комнату вряд-ли;
в) чтобы ломать, нужно сначала иметь невзломанное решение или хотя бы исправленное после взлома; если взломали после блокировки, тогда, извините, тест не покажем.
В конце концов большинство здесь те, кто прежде всего решает задачи. И ломают как-правило тех кто малоопытен или ещё где-то мало. Пусть смотрят на чём взломали и оперативно исправляют.
Да да да.
Пиши об этом почаще.
Раз цвета для рейтинга заменили, то и на дивизионы тоже когда-нибудь поделят.
Надо уже наконец-то разделить дивизионы.