Блог пользователя riadwaw

Автор riadwaw, 5 лет назад, По-английски

In my opinion it's not interesting part of the contest to write algorithms you have already written dozens of times. I kind of see why people who prepare to IOI/ICPC would do that, but not other participants. So I created yet another tool that allows to use your own library locally and submit to CodeForces. Idea is that you write in one file, then submit another file and you don't need to do any other action to actually generate file to submit (once everything is configured)

Demo

The tool consists of two independent parts

inline_includes: this is a simple python script that inlines all the includes you used from whitelist of directories (so that standard headers such as are not inlined). It's far from supporting whole c++ (e.g it doesn't support #include MACRO) but it was enough for my library. This part can be replaced for your own language. The paths to directories to inline is passed

command_fs: this tool is written in c++ using libfuse. It accepts to directories (mount point and source directory) and a command (With arguments). So for each file file in source directory it virtually creates file file is the mounted directory with the content of output of command command args file. So, if you pass inline_includes as a command it "replaces" all the files with its contents with inlined includes

OS Support:

MacOS: I tested on 10.14 and 10.15
Linux: It should work but I haven't tested
Windows: I don't know much about windows but in principle it should work via fuse api of WinFSP

Installation:

inline_includes:

From brew:
brew install AlexeyDmitriev/sp/inline_includes

Manual:
It's just a python file, you can grab it from github in the most convenient for you way.

command_fs:

From brew:

brew cask install osxfuse # Required because formula can't depend on cask in brew  
brew install AlexeyDmitriev/sp/command_fs

Manual:
1. Install libfuse in someway
2. It's a cmake project, you can get it from github and build as usual:

mkdir build
cd build
cmake ..
make

Then binary called command_fs is what you need

I'll appreciate help to package this for your own platforms.

Usage

So, first you create a virtual filesystem (assuming both command_fs and inline_includes are in $PATH, otherwise you can replace them with a path to them)

command_fs /path/to/mount_point /path/to/sources/you/write inline_includes /include/path1 /include/path2

Then, all the files from /path/to/sources/you/write are inlined in /path/to/mount_point and you are ready to enjoy problem solving

Once you are done you can unmount the directory using umount /path/to/mount_point (but you don't have to)

Also you should be able to configure automount so that you don't need to run anything after reboot but I've never tried that.

Any comments are welcome

Полный текст и комментарии »

  • Проголосовать: нравится
  • +113
  • Проголосовать: не нравится

Автор riadwaw, история, 5 лет назад, По-английски

Let's discuss problems.

How to solve B, F?

Полный текст и комментарии »

  • Проголосовать: нравится
  • +52
  • Проголосовать: не нравится

Автор riadwaw, история, 6 лет назад, По-английски
  • Проголосовать: нравится
  • +63
  • Проголосовать: не нравится

Автор riadwaw, 6 лет назад, По-английски
  • Проголосовать: нравится
  • +40
  • Проголосовать: не нравится

Автор riadwaw, история, 6 лет назад, По-английски

I didn't help but notice that almost each contest there's at least some solutions that are clearly incorrect but get accepted nevertheless. For example, discussions for last 3 numbered CF rounds:

Sometimes problemsetters/testers could have done better job, sometimes it's seems close to impossible to fail specific solutions in advance without actually coming up with this solution.

So, here is an idea which I both thought of myself and also heard from several other people: What if after the contest and system testing phase there was open hacking phase, which doesn't give any points for hackers but helps to find solutions that should not be accepted.

It seems that it should be easily implementable, considering it already works somewhat like this in Educational rounds, but MikeMirzayanov may comment on that.

I see, however, several possible issues with that:

  1. It will require to wait for round results longer.
  2. It will not work very well for onsite competitions when results should be declared shortly after the contest (But in these cases open hacking phase could be cancelled or shortened(there's normally much less solutions to check after all))
  3. Author may get more lazy with creating tests (i.e saying "ok, contestants will hack that anyway"), which may reduce overall quality of the resulting testsets
  4. There will be people who are more targeted by hacks then others, which may be viewed as not fair. E.g if you are tourist , your bug in problem A will probably be found because your code is reviewed by a lot of participants who know about you personally (or see you in the first line of scoreboard), but a lot less people will read few thousands of (preliminarily) accepted solutions.
  5. For solutions that involve random number generators and/or are close to TL balance may be somewhat changed. E.g if I know, that mnbvmar's solution worked in 998ms out of 1s, I'll probably try to "hack" using (almost) same tests few times. Again, I will care less about people who are lower in the scoreboard because hacking them will not get me closer to the hoodie.

However, I think positive impact of this feature would be less important then negative impact.

What do you think? Any other issues you can think of or any other comments are welcome.

Полный текст и комментарии »

  • Проголосовать: нравится
  • +117
  • Проголосовать: не нравится

Автор riadwaw, 7 лет назад, По-английски

It seems something went wrong with updates to polygon certificate and it's now expired

Expired: Saturday, 22 July 2017 at 05:55:00 Moscow

@MikeMirzayanov

Полный текст и комментарии »

  • Проголосовать: нравится
  • +30
  • Проголосовать: не нравится

Автор riadwaw, история, 7 лет назад, По-английски

The next round is at 14:00 UTC today

Top20 advances to the on-site round in Dublin

Полный текст и комментарии »

  • Проголосовать: нравится
  • +57
  • Проголосовать: не нравится

Автор riadwaw, история, 7 лет назад, По-английски

Round starts at 14:00 UTC today and 25 participants will advance to final round in Dublin.

Полный текст и комментарии »

  • Проголосовать: нравится
  • +118
  • Проголосовать: не нравится

Автор riadwaw, история, 8 лет назад, По-английски

Starts in less than 3 hours

Top 200 from round 2 are allowed to participate and top 25 (aged 18+) will advance to onsite finals

Let's discuss problems here.

Полный текст и комментарии »

  • Проголосовать: нравится
  • +100
  • Проголосовать: не нравится

Автор riadwaw, история, 8 лет назад, По-английски

Tomorrow is GP of Dolgoprudny which is prepared by my colleagues and me.

Hope, you'll like the problems which we can discuss here after the contest.

Also, we've prepared mini-tutorial which I'll post here after the contest too.

Good luck!

Полный текст и комментарии »

  • Проголосовать: нравится
  • +165
  • Проголосовать: не нравится

Автор riadwaw, история, 8 лет назад, По-английски

Tomorrow, 16:00 UTC (well, at least if calculated correctly)

UPD: you have 10 more minutes to register

Полный текст и комментарии »

  • Проголосовать: нравится
  • +67
  • Проголосовать: не нравится

Автор riadwaw, история, 9 лет назад, По-английски
  • Проголосовать: нравится
  • +11
  • Проголосовать: не нравится

Автор riadwaw, история, 9 лет назад, По-русски
  • Проголосовать: нравится
  • +13
  • Проголосовать: не нравится

Автор riadwaw, история, 9 лет назад, По-русски

А именно ссылка на получение рейтингов: http://mirror.codeforces.com/api/user.ratedList?lang=en {"status":"FAILED","comment":"Internal Server Error"}

Полный текст и комментарии »

  • Проголосовать: нравится
  • +17
  • Проголосовать: не нравится

Автор riadwaw, 9 лет назад, По-русски

624A - Спасти Люка

За единицу времени ширина полосы уменьшается на v1 + v2. Это значит, что она уменьшится от L до d за . Тот момент, когда ширина стала равна d — последний, когда Люк еще живет, значит t — это ответ.

624B - Составить строку

Отсортируем кол-ва букв по невозрастанию.
Очередную букву берем столько раз, сколько можно, но строго меньше, чем предыдущую. Не забываем, что если предыдущая буква не взята вообще, то все следующие тоже взяты не будут.

623A - Граф и строка

Заметим, что вершины "b" связаны со всеми остальными вершинами в графе. Найдём все подобные вершины и отметим их символом "b". После этого найдём любую непомеченную вершину V, пометим её символом "a". Все непомеченные вершины, которые связаны с V, тоже должны быть помечены символом "a". Все остальные непомеченные вершины в графе отметим символом "c".

Теперь нужно проверить корректность графа, т.е. убедиться, что все вершины "a" связаны только между собой и с вершинами "b". Аналогично проверим все вершины "c".

623B - НОД массива

Хотя бы один из концов (a1 или an) изменится не больше, чем на 1. А это значит, что если gcd будет не равен 1, то он будет делиться на один из простых делителей одного из чисел a1 - 1, a1, a1 + 1, an - 1, an, an + 1. Переберём это простое.

Пусть фиксировано простое p, тогда для каждого числа мы знаем, что оно, либо уже делится на p, либо его можно поправить за b, либо оно должно входить в массив-результат.

После этого, можно запустить динамику dp[кол-во чисел, которое рассмотрели][отрезок для изменения за a еще не начался/начался/закончился] = минимальная стоимость

Итоговая сложность O(Nd) = O(NlogN), где d — количество простых делителей для перебора

623C - Электрические заряды

Рассмотрим сперва отдельно случаи, когда все точки спроецированы на одну ось (Тогда ответ — разница между максимумом и минимумом по одной из координат)

Далее, рассмотрим самую левую и самую правую точку из тех, что спроецированы на ось x. Пусть их координаты xL и xR. Заметим, что все точки с координатами xL ≤ x ≤ xR также можно спроецировать на ось x, это не увеличит диаметр. Таким образом, если отсортировать точки по x-координате, можно считать, что точки спроецированные на ось x образуют подотрезок (непрерывный подмассив).

Запустим бинарный поиск, теперь нам нужно проверять, что можно спроецировать точки так, что диаметр <= M.

Зафиксируем самую дальнюю от 0 по x-координате точку, которая в итоге будет спроецированной на ось x. Она может быть слева или справа от нуля. Случаи будут симметричны, для примера рассмотрим случай, когда эта точка меньше 0. Пусть ее координата равна xL < 0. Заметим, что все точки, для которых 0 ≤ x - xL ≤ M и |x| ≤ |xL| можно спроецировать на ось x и от этого диаметр не увеличится, а все оставшиеся нужно спроецировать на ось y. Среди оставшихся точек нужно найти минимум и максимум по y координате и тогда ответ "можно", если расстояние между этими точками не превосходит M и расстояние от них до (xL, 0) не превосходит M.
Теперь предподсчитаем минимум и максимум y координат на префиксе и суффиксе все точек. Будем перебирать левую границу отрезка точек спроецированных на x, а правую будем искать бинпоиском или поддерживать методом двух указателей.

Таким образом одна проверка работает за O(M) или , и общая сложность или .

623D - День Рождения

Обозначим qi = 1 - pi.

Идея решения: сначала нужно назвать каждого друга хотя бы по разу, потом на каждом шаге максимизируем вероятность закончить игру не позже, чем на данном шаге. Моделируем 300000 шагов, считая по ходу дела сумму . , где ki — количество раз, когда мы называли i-го друга ().

Заметим, что матожидание с небольшой погрешностью равно при достаточно большом N (это легко видеть, раскрыв скобки в приведенном выше выражении). Поэтому нам достаточно доказать, что

1) Приведенная выше жадная стратегия дает максимальные значения всех Pr(t).

2) На 300000 шаге погрешность меньше 10 - 6.

Доказательство:

1) Предположим, что для какого-то t набор li (), отличный от полученного жадным алгоритмом набора ki, дает наибольшее значение Pr(t). Возьмем какое-нибудь ka < la и kb > lb (такие найдутся, если наборы не совпадают, а их суммы равны t), тогда легко показать, что если в наборе li заменить lb на lb + 1, la на la - 1, то будет достигнуто еще большее значение Pr(t), что противоречит предположению о максимальности набора li.

2) Заметим, что qi ≤ 0.99. Возьмем набор ki такой, что для всех i выполняется , он даст вероятность завершения игры за t шагов не большую, чем оптимальный набор. Тогда Pr(t) ≥ (1 - 0.99t / 100)100 ≥ 1 - 100·0.99t / 100. Погрешность оценки не превосходит , что оценивается, как сумма геометрической прогрессии, и при N ≥ 300000 получим погрешность меньше 10 - 7.

623E - Преобразование последовательности Для начала заметим, что если последовательность префиксных ксоров строго возрастает, то на каждом шаге ai имеет хотя бы один новый бит по сравнению с предыдущими элементами. Так как битов всего k, длина последовательности не может быть больше k. Поэтому если n > k, то ответ 0.

Решим сначала задачу за O(k3). Посчитаем dp[n][k] — количество последовательностей длины n таких, что a1|a2|... |an имеет ровно k битов. Переход — добавить l новых битов и выбрать произвольно значения k битов, которые уже вошли в префиксный ксор. Значит, dp[n + 1][k + l] должно быть увеличено на dp[n][k]·2k·Ck + ll. Биномиальный коэффициент соответствует выбору добавляемых l битов из k + l, которые будут представлены в a1|a2|... |an + 1.

Заметим, что переход не зависит от n, поэтому попробуем применить идею бинарного возведения в степень. Пусть мы хотим слить динамики dp1[k], dp2[k], где k — количество битов в a1|a2|... |aleft и b1|... |bright соответственно. Хотим посчитать dp[k] для массивов размера left + right. Формула получается такая:

Здесь l соответствует битам в ксоре левой части, и для каждого числа из правой части эти l битов можно выбрать произвольно. Перепишем формулу так:

Значит, мы можем посчитать dp[k] для всех k, перемножив многочлены и . Коэффициенты первого получаются из коэффициентов второго за . Значит, мы можем посчитать динамику для всех длин — степеней двойки за , используя быстрое преобразование Фурье. На самом деле, удобнее насчитывать , используя то же самое равенство. Далее, используя ту же стратегию слияния, можно найти ответ для данного n, используя динамику для степеней двойки. Получили решение за .

Мы решили попросить ответ по модулю 109 + 7, чтобы участники не смогли легко догадаться, что это задача на FFT :) Поэтому для получения ОК нужно было реализовать один из методов перемножения многочленов по большому модулю с использованием FFT. Другой подход состоял в применении алгоритма Карацубы, наша его реализация не укладывалась в ТЛ, однако jqdai0815 каким-то образом смог заставить свое решение с Карацубой пройти :)

Полный текст и комментарии »

Разбор задач AIM Tech Round (Div. 1)
Разбор задач AIM Tech Round (Div. 2)
  • Проголосовать: нравится
  • +92
  • Проголосовать: не нравится

Автор riadwaw, история, 9 лет назад, По-русски

Round 1 starts in 10 hours

Note, that rules were changed:
To advance to Round 2 you need to score 30 points or more.

Sorry, posted only in russian version first

Полный текст и комментарии »

  • Проголосовать: нравится
  • +98
  • Проголосовать: не нравится

Автор riadwaw, история, 9 лет назад, По-русски

К сожалению, довольно часто авторы контестов не знают или не помнят, о том, что запись в блоге(разбор) можно прикрепить к соревнованию.

Например, к 315 раунду анонс добавлял я, у 313-314 тоже сейчас нет прикрепленного разбора. Это значит, что разбор придется искать дополнительно(в Гугле, например)

Было бы удобно, если бы это происходило автоматически, например, если пост называется Codeforces Round xxx [Editorial|tutorial], то предложить автору прикрепить его к контесту.

Полный текст и комментарии »

  • Проголосовать: нравится
  • +58
  • Проголосовать: не нравится

Автор riadwaw, 10 лет назад, По-английски

You need to get 20 points in order to advance to Round 1.

Post about entire GCJ

Полный текст и комментарии »

  • Проголосовать: нравится
  • +66
  • Проголосовать: не нравится

Автор riadwaw, 10 лет назад, По-русски

Registration is started!

Schedule:

  1. Qualification April 10 23:00 UTC
    Discussion
  2. Round 1A April 18 01:00 UTC (anyone who get fixed number of points in qual).
    Discussion.
  3. Round 1B May 2 16:00 UTC (anyone who was allowed to participate in 1A, but didn't advance to round 2 yet)
    Discussion
  4. Round 1C May 10 09:00 (anyone who was allowed to participate in 1A, but didn't advance to round 2 yet)
  5. Round 2 May 30 14:00 UTC (Top 1000 from each 1X round)
    Discussion
  6. Round 3 June 13 14:00 UTC (Top 500 from Round 2)

T-shirts are for top 1000 in Round 2.

Distributed Code Jam is also introduced

Official page

Полный текст и комментарии »

  • Проголосовать: нравится
  • +172
  • Проголосовать: не нравится

Автор riadwaw, 10 лет назад, По-английски

Contest is over.

How to solve D ?

How to solve F correctly?

Полный текст и комментарии »

  • Проголосовать: нравится
  • +18
  • Проголосовать: не нравится

Автор riadwaw, 10 лет назад, По-русски

509A - Максимум в таблице

В этой задаче нужно было сделать то, что написано в условии: построить таблицу(двумерный массив) по указанным правилам и найти максимум в таблице.

Можно было заметить также, что максимальный элемент находится в правом нижнем углу.

Также проходило и просто решение рекурсией:

def elem(row, col):
    if row == 1 or col == 1:
        return 1
    return elem(row - 1, col) + elem(row, col - 1)

Кроме того, можно было заметить в таблице Треугольник Паскаля и понять, что ответ — это

Готовил: riadwaw
Разбор от: riadwaw

509B - Раскраска шаров

Пусть найдутся две кучки, в которых количество камней отличается строго больше чем на k, тогда решения не существует:

Пусть теперь M = max ai ≤ min ai + k = m + k, покажем, как построить правильную раскраску:

  • покрасим по m камней в каждой кучке в первый цвет
  • в каждой кучке все оставшиеся камни покрасим в любые различные цвета(можно использовать первый еще один раз) (это можно сделать т.к осталось не более k камней.

Заметим, что 1-ый цвет встречается в каждой кучке m или m + 1 раз, а остальные цвета — 0 или 1 раз

Готовил: Kostroma
Разбор от: riadwaw

509C - Суммы цифр

Будем действовать жадно. На первом шаге найдём минимальное число b1 с суммой цифр a1. Далее, на i-м шаге найдём минимальное число bi с суммой цифр ai, которое больше чем bi - 1.

Почему это правильно? Поскольку b1 — минимальное число с суммой цифрой a1, то первое число не меньше чем b1. Далее по индукции: i-е число не меньше bi, поэтому (i + 1)-е число должно иметь сумму цифр ai + 1 и быть больше чем bi. Но минимальное такое число как раз bi + 1. Значит, построенный пример даёт оптимальное решение задачи.

Осталось научиться решать подзадачу: найти минимальное число с суммой цифр x, которое больше y. Она решается стандартным подходом: идем по цифрам числа y с младших разрядов и пытаемся увеличить соответствующую цифру (считаем, что каждое число содержит бесконечно много нулей слева от своей старшей цифры). Пусть справа осталось k цифр, тогда сумма этих k цифр может быть любым натуральным числом от 0 до 9k. Если получилось увеличить текущую цифру так, что при каком-то выборе цифр справа от неё получилась сумма x, то мы получили ответ. Заметим, что цифры справа от текущей позиции в таком случае нужно заполнять жадно с младших разрядов, каждый раз используя максимально возможную цифру — таким образом мы действительно получим минимальный ответ.

Оценим максимальную длину ответа, т.е. числа bn. Заметим, что если длина десятичной записи bi хотя бы 40, то в промежутке между 10k и 10k + 1, где k — наименьшее натуральное число, такое что 10k ≥ bi, есть числа со всеми суммами цифр от 1 до 9k. Так как все ai ≤ 300, то при в отрезке [10k, 10k + 1] есть любая из интересующих нас сумм цифр. Значит, при достижении 40-значного числа на каждом шаге количество цифр в десятичной записи bi увеличивается не более чем на 2, а значит итоговый ответ будет иметь десятичную записать не длиннее 640 цифр (еще немного подумав, можно понять, что эту оценку можно усилить до 340).

Значит, получаем решение за O(n·maxLen), где maxLen — максимальная длина ответа. Поскольку n ≤ 300, maxLen ≤ 640, такое решение с запасом проходит.

Готовил: Endagorion
Разбор от: Kostroma

509D - Восстановление чисел

Заметим, что если в корректном ответе ко всем bi добавить 1, а из всех ai вычесть 1 (и при необходимости добавив k), то ответ останется корректным. поэтому можно считать, что ai = 0, тогда из первой строки однозначно восстанавливаются bj, а по ним — ai (Можно пока разрешить им быть отрицательными, а потом добавить нужное число раз k). Теперь для любых i, j мы можем найти "ошибку" .

Если все ошибки нулевые — всё отлично, возьмем k достаточно большим и ответ будет автоматически корректным.

Для того, чтобы не нарушалось условие в клетке (i, j) необходимо и достаточно, чтобы ei, j делилось на k. Таким образом, k должно быть делителем gcdi, j(ei, j). При этом, k должно быть строго больше, чем все числа в таблице. Таким образом выгодно попытаться поставить k = gcdi, j(ei, j), что можно сделать, если k > maxi, j(wi, j). В противном случае ответа не существует.

Готовили: Kostroma, riadwaw
Разбор от: riadwaw

509E - Мелодичная песня

Посчитаем суммы vowel(si) на всех префиксах строки, чтобы за O(1) можно было легко посчитать сумму vowel(si) на любой подстроке.

Будем перебирать m с 1 до . При фиксированном m найдем сумму простых мелодичностей всех подстрок длины m. Для этого посмотрим, сколько раз i-й символ s входит в эту сумму.

При m = 1 каждый символ входит ровно один раз. При m = 2 все символы, кроме крайних — 2 раза, крайние 1 раз. При m = 3 все 3 раза, кроме второго и предпоследнего(2 раза) и первого и последнего (1 раз).

При m = |s| каждый символ входит один раз, как и в случае m = 1, а при m = |s| - 1— 2 раза кроме крайних, как и в случае m = 2.

В общем случае, i-й символ входит min(m, |s| - m + 1, i, |s| — i + 1) раз. Можно заметить, что при переходе от m к m + 1 к сумме прибавляются вхождения символов на подотрезке с m по |s| - m + 1(если m > |s| - m + 1, то убавляются на подотрезке с |s| - m + 1 по m).

Таким образом, можно легко пересчитать сумму вхождений гласных при переходе от m к m + 1, прибавив(убавив) сумму vowel на подстроке. Итоговое решение за O(N).

Готовил: zemen
Разбор от: zemen

509F - Контроль успеваемости

Рассмотрим произвольное дерево на n вершинах. Подвесим дерево за вершину 1, и пусть массив a — результат работы dfs-а. Тогда вершины поддерева с вершиной v, 1 ≤ v ≤ n, записаны в подмассив a[lv..lv + sizev - 1], где lv есть позиция вершины v в массиве, а sizev — размер поддерева.

Решим задачу, используя сей факт и ДП на подотрезках. Пусть задан массив a, и пусть e[l, r] есть количество деревьев, составленных из вершин a[l], a[l + 1], ..., a[r], т.ч. dfs, запущенный из вершины a[l], выведет вершины в том же порядке, в котором они представлены в массиве a. Тогда, если l = r, то e[l, r] = 1; иначе , где сумма берется по всем возможным множествам детей a[l], т.е. по всем таким k;pos1, ..., posk + 1, что l + 1 = pos1 < pos2 < ... < posk + 1 = r + 1, 1 ≤ k ≤ r - l, a[pos1] < a[pos2] < ... < a[posk] (вспомним, что в dfs-е дети перебираются в порядке возрастания). Однако даже при наличии ответов для подотрезков отрезка [1..n] решение с использованием такой формулы будет работать экспоненциально долго.

Финальная идея заключается во введении d[l, r]:  = e[l - 1, r], 2 ≤ l ≤ r ≤ n. Действительно, из вышеприведенной формулы следует, что d[l, r] = ([утверждение] определим как 1, если утверждение истинно, и 0, если ложно), а также e[l, r] = d[l + 1, r]. Таким образом, d[l, r] и e[l, r] для каждого отрезка вычисляются за линейное время; ответом же на задачу является e[1, n]. Итоговая асимптотика решения O(n3).

Готовил: DPR-pavlin
Разбор от: DPR-pavlin

Полный текст и комментарии »

  • Проголосовать: нравится
  • +81
  • Проголосовать: не нравится

Автор riadwaw, 10 лет назад, По-английски

Today at 19:00 MSK

We can discuss problems here after the contest

Полный текст и комментарии »

  • Проголосовать: нравится
  • +39
  • Проголосовать: не нравится

Автор riadwaw, 10 лет назад, По-русски

Было бы круто, если бы была подсветка синатксиса во взломах(такая же как при просмотре своих посылок).

Сегодня, например, я получил один из своих неудачных взломов из-за того, что не заметил, что у человека кусок кода закомментирован. Хорошая подсветка решила бы это.

Полный текст и комментарии »

  • Проголосовать: нравится
  • +162
  • Проголосовать: не нравится

Автор riadwaw, 10 лет назад, По-русски

Не знаю, кого пинать напрямую, но мне как-то передавали слова одного из членов жюри про мой комментарий(и): "Кто такой Алексей Дмитриев и какого черта он это пишет?", так что я надеюсь и это снова прочитают.

Нет, я понимаю задержки на старте, к этому все привыкли. Но почему ссылку на пробный тур уже после его запланированного начала можно узнать только через Снарка? К слову, к тому времени этот самый пробный тур еще не начался. В чем вообще проблема включить пробный тур да хоть за неделю до старта и забыть про него? Все равно там задачи те же, что были в прошлом году. Ссылку на основной тур нам вообще не сказали(!) (Благо наша команда догадалась еще на пробном туре перебрать id контестов в обе стороны на единицу).

Гвоздь программы — клар "В Москве можно печатать". Да какого черта?! Ладно, на секунду забудем о настройке печати с начала контеста, но почему нельзя включить эту функциональность одновременно? Ладно, благодаря тому, что Физтех (ровно как и некоторые другие вузы, включая МГУ) всегда имеет в топе достаточное кол-во команд, не меньшее своей квоты, никакого влияния на выход в ПФ это не поимело и весь Физтех был в равных условиях. Однако, когда в прошлом году встал вопрос о включении standings на больших мониторах, которые висят у нас в кабинетах, где проводится ЧФ, все окончилось на том, что "участники из МГУ не имеют такой возможности, поэтому — нет".

Кстати, о том, что печать заработало можно было бы послать клар/объявить в аудиториях. Мы случайно заметили, что кто-то печатает.

Кстати, почему нельзя настроить печать и на пробном туре? Собственно, пробный тур вроде не для того сделан, чтобы задачки порешать, а как раз протестировать все и участникам, и жюри. Может быть вам жалко по листику на каждую команду? (Тогда рекомендую не делать задачи типа K, целые 3 листа с команды экономии).

К слову о качестве печати: у нас, например, первые несколько символов в каждой строке не печатались. Если бы это можно было проверить во время пробника, то и пофиксить бы, наверно, можно было, а заниматься кларописанием во время тура — неудобно.

По поводу печати на половинках: там уже научились переносить длинные строки? Помнится у нас раньше были с этим проблемы, нынче вроде не столкнулись (печатали не много).

А вот за проблемсет спасибо авторам. Все, кроме задачи G, было хорошо понятно, а сами задачи были довольно интересными.

Полный текст и комментарии »

  • Проголосовать: нравится
  • +112
  • Проголосовать: не нравится

Автор riadwaw, 10 лет назад, перевод, По-русски

Changelog:

  • 0.18
    • CopyAction теперь регенерирует output file
  • 0.17
    • Поддержка для постановки инклудов внутри открытого файла
  • 0.16.4
    • Поддержка WSL
  • 0.16.3
    • Поддержка CLion 2020.1
  • 0.16.2
    • Поддержка CLion 2019.1
  • 0.16
    • Автоматический выбор таска при смене файла
    • Автоматический переход к файлу при выборе таска

JHelper — это плагин для написания контестов на C++. Он автоматически инлайнит код из вашей библиотеки, при этом в файле для сабмита оказывается только используемый код. Кроме того, он позволяет добавлять тесты для тестирования на них вашего решения. Планируется возможность распарсить контест/задачу, чтобы сепмлы добавлялись автоматически

Доступен для CLion

Естественно плагин бесплатный, IDE стоит 89$/год, бесплатны для студентов, бесплатный триал 30 дней, часто можно бесплатно пользоваться EAP(типа бета)-версиями

Плагин доступен из репозитория плагинов в CLion и на сайте JetBrains

Инструкции по установке/использованию на английском на вики. Спрашивайте, что не понятно.

О багах и пожеланиях можно(и нужно) сообщать сюда ил в трекер.

Буду рад

  • багам и пожеланиям
  • реализации фич, до которых я еще не дошел
  • человеку, который сделает вики понятной :)

Все еще можно сделать этот плагин многоязычным (я имею ввиду поддержать другие языки программирования). Всегда готов обсудить это.

Спасибо Egor'у за идею с его Chelper и Abra'е за ревью.

Исходный код | Известные баги | Баг трекер | Инструкции

Полный текст и комментарии »

  • Проголосовать: нравится
  • +64
  • Проголосовать: не нравится