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

Автор gepardo, история, 22 месяца назад, По-английски

Do you believe this is impossible? It's really not, because some people do it. See yourself:

1775D - Дружелюбные пауки: 188718250 188731749 188739534

1775F - Лаборатория на Плутоне: 188742718 188744106 188756319

Writing source code directly in assembly language may make your code faster, as you can write the CPU instructions directly, making some critical optimization faster than the compiler-generated code.

Of course, the statement above about speed is false, and sometimes it's hard to write a faster code than the compiler generates. And, as you can see, the submissions just contain the code generated by the compiler instead of being written manually.

So, why do you think people may want to do this on contests?

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

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

Автор gepardo, история, 3 года назад, По-русски
Tutorial is loading...
Tutorial is loading...
Tutorial is loading...
Tutorial is loading...
Tutorial is loading...
Tutorial is loading...

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

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

Автор gepardo, история, 4 года назад, По-английски

Hello everyone :)

We are happy to announce that XXI Open Cup, GP of Belarus will take place on February 14, 2021 at 11:00 MSK.

The authors of the problems are gepardo, kimden, Mediocrity, 244mhq, Wind_Eagle, and PuRpLe_FoReVeR. Also greencis, aleex, RED_INSIDE, programmer228, mrboorger, Chmel_Tolstiy, and gosuto took part in preparing the contest.

This contest was in Petrozavodsk, so if you have been there and have seen the problems, do not solve it now.

Links: Div. 1, Div. 2. You need an Open Cup login to participate.

You can discuss the contest here after it's over.

Good luck everyone and I hope you'll enjoy the problems!

UPD: Editorial

UPD 2: The contest is added to gym now.

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

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

Автор gepardo, история, 4 года назад, По-русски

1420A - Сортировка кубов

Подсказка
Разбор
Код C++ (Wind_Eagle)

1420B - Камень и рычаг

Подсказка
Разбор
Код C++ (Wind_Eagle)

1420C1 - Армия покемонов (простая версия)

Подсказка
Разбор
Код C++ (gepardo)

1420C2 - Армия покемонов (сложная версия)

Подсказка
Разбор
Код Java (gepardo)
Код C++ (Wind_Eagle)

1420D - Спасти Нибель!

Подсказка
Разбор
Код Java (gepardo)

1420E - Боевые лемминги

Подсказка 1
Подсказка 2
Подсказка 3
Разбор
Код C++ (gepardo)

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

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

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

Hello, Codeforces!

If you tried to prepare some competitive programming problems, you might parse parameters like this:

#include "testlib.h"
#include <cstdlib>

using namespace std;

int main(int argc, char **argv) {
  registerGen(argc, argv, 1);
  int n = atoi(argv[1]);
  int m = atoi(argv[2]);
  int k = atoi(argv[3]);
  ...

Of course, such way has many disadvantages:

  • You need to pass the exact amount of parameters, you cannot define default values for them.
  • If you have many parameters, it's easy to forget the order.
  • If you pass too few of the them, it will be undefined behavior.

So I developed a library called ParmPars to pass parameters to generators in a more convenient way. You can find it on GitHub. I hope it will help you to generate tests better.

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

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

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

Hello, Codeforces!

I think many of you know about Mo's algorithm. For those, who don't know, please read this blog.

Here, I consider an alternative (and faster) approach of sorting queries in Mo's algorithm.

Table of contents

 

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

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

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

Hello, Codeforces!

Some time ago I created a blog post about Sqrt-tree. If you didn't read this post, please do it now.

But earlier, we were able just to answer the queries on a static array. Now we will make our structure more "dynamic" and add update queries there.

So, let's begin!

Update queries

Consider a query that does the assignment ax = val. We need to perform this query fast enough.

Naive approach

First, let's take a look of what is changed in our tree when a single element changes. Consider a tree node with length l and its arrays: , and . It is easy to see that only elements from and will change (only inside the block with the changed element). will change O(l) elements. Therefore, total update count per node is O(l).

We remember that any element x is present in exactly one tree node at each layer. Root node (layer 0) has length O(n), nodes on layer 1 have length , nodes on layer 2 have length , etc. So the time complexity per update is .

But it's too slow. Can it be done faster?

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

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

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

Привет, Codeforces!

Когда говорят про языки программирования со встроенной реализацией длинной арифметики, обычно говорят о таких языках, как Java или Python. Сегодня я расскажу про длинку в языке Pascal, а, точнее, в его реализации Free Pascal Compiler.

Простейший код, который читает два "длинных" числа и складывает их, выглядит так:

Код

Модуль gmp содержит все классы и операторы дя работы с "длинными" числами.

Как он работает? Этот модуль содержит заголовки функций, импортируемые из GNU Multiprecision Library. Программа и библиотека связываются динамически, поэтому для работы программы необходимо, чтобы эта библиотека была установлена. К счастью, в большинстве дистрибутивов Linux она установлена по умолчанию и поэтому может быть использована в таких системах, как ejudge и Яндекс.Контест. В тестирующих системах на Windows библиотека не установлена, поэтому такая штука не сработает.

Для удобства работы в модуле реализована объектно-ориентированная обёртка над функциями libgmp, для которой перегружены все необходиые операторы (да-да, во Free Pascal есть перегрузка операторов!)

Что еще примечательно, в libgmp реализовано быстрое извлечение целочисленного квадратного корня. Поэтому можно написать очень простой, быстрый и короткий код на задачу F с заочного тура Открытки.

Код

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

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

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

Hello, Codeforces!

Some time ago I invented an interesting data structure and I'd like to share it with the community. Maybe, it was known before, and if you knew about it before my blog post, please share the link to the source.

What can the data structure do?

Given an array a that contains n elements and the operation op that satisfies associative property: (x op y)op z = x op(y op z) is true for every x, y and z.

So, such operations as gcd, min, max, sum, multiplication, and, or, xor, etc. satisfy these conditions.

Also we have some queries l, r. For each query, we need to find al op al + 1 op ... op ar. Let's call such queries q(l, r).

My data structure can process such queries in O(1) time with preprocessing time and memory.

How it works?

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

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

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

Доброго времени суток, Codeforces!

Было бы очень неплохо, если бы все материалы соревнований Codeforces были бы доступны публично и была бы возможность выкачивать архивы. На это есть несколько причин:

  • Проще проводить тренировки. На тренировках могут попадаться разные задачи, и бывает неплохо собрать их в один контест в одной тестирующей системе. Существование тестов в открытом виде сильно поможет проведению тренировок таким образом.

  • Большая доступность. Если сайт упадет или уйдет в оффлайн на некоторое время, архивы с задачами все равно останутся, и можно будет тестировать их локально.

  • Лучшая сохранность задач. Архивы с задачами будут храниться не на одном только Codeforces. Если утеряется часть задач на серверах, то восстановить их будет меньшей проблемой.

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

Такая идея уже выдвигалась на заре существования сайта, вот блог от MikeMirzayanov на эту тему. Но, судя по всему, прогресс по этому вопросу остановился.

Лучше всего, конечно, если бы MikeMirzayanov выложил бы матералы централизованно. Жду его ответа на этот пост. Но я хотел бы выложить архивы своих контестов, не дожидаясь его решения:

Codeforces Round 379 (Div. 2) : ссылка

Codeforces Round 404 (Div. 2) : ссылка

Есть еще пост от Arpa, в котором он выложил материалы своего раунда Codeforces Round 383 (Div. 1).

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

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

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

Перед вами разбор задач сегодняшнего контеста. Я постарался расписать решения задач как можно более подробно, но если что-то будет непонятно, смело пишите в комментариях! :)

785A - Anton and Polyhedrons

Подсказка
Разбор
Код C++
Код Java
Код Python

785B - Anton and Classes

Подсказка
Разбор
Код C++
Код Java
Код Python

785C - Anton and Fairy Tale

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

Подсказка
Разбор
Код C++
Код Java
Код Python

785D - Anton and School - 2

Подсказка
Разбор
Код C++
Код Java

785E - Anton and Permutation

Приношу извининения, что эта задача не была оригинальной. Я постараюсь, чтобы такое больше не повторилось.

Если у вас в этой задаче TL или ML, не стоит думать, что ограничения по времени/памяти слишком узкие. Авторское решение работает за 1.2 секунды и тратит 9 МБ памяти.

Подсказка
Разбор
Код C++
Код Java

Альтернативное решение от Vladik:

Код C++

Альтернативное решение от netman:

Код Java

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

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

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

Привет, Codeforces!

Завтра, 15 марта 2017 в 18:05 (время московское) состоится очередной рейтинговый раунд на Сodeforces для участников из второго дивизиона. Участники из первого дивизиона, как обычно, смогут поучаствовать вне конкурса. Это мой второй раунд, надеюсь, он вам понравится больше, чем предыдущий.

На раунде, как обычно, будет пять задач и два часа на их решение. Советую внимательно прочитать условия всех задач. Также советую перепроверять решения на правильность, даже если они прошли все претесты — вердикт Претесты пройдены еще не значит, что решение полностью правильное! Желаю всем получить удовольствие от контеста и научиться чему-то новому, решая задачи.

Как и в прошлый раз, задачи будут про Антона и его друзей.

Хотелось бы поблагодарить Алексея Вистяжа (netman) за помощь в подготовке контеста, Владислава Вишневского (Vladik) за тестирование раунда, Дмитрия Клебанова (dmitriyklebanov) за вычитывание условий, и конечно же, Михаила Мирзаянова (MikeMirzayanov) за замечательные платформы Codeforces и Polygon.

Разбалловка: 500 — 1000 — 1500 — 2250 — 2500.

UPD. Контест закончился, системное тестирование уже началось, разбор скоро появится.

UPD2. Появился разбор.

UPD3. Поздравляю победителей контеста!

Div. 1

  1. uwi
  2. rajat1603
  3. SaSa
  4. mr.banana
  5. Kaban-5

Div. 2

  1. CommonAnts
  2. Gauss
  3. binsjl
  4. hotwater
  5. mister_dudec

Всем спасибо за участие! :)

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

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

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

Добрый день! Сегодня, просматривая посылки со старых раундов, нашел баг на Codeforces: при попытке просмотреть взломанные решения вылетает ошибка.

24292787

22241174

22235511

Чтобы увидеть ошибку, нужно обязательно быть залогиненным на сайт (если не залогинился, ошибка не вылетает).

Баги

В связи с этим, еще возник такой вопрос: есть ли багтрекер у Codeforces? Если есть, неплохо было бы дать на него ссылку где-то на видном месте. Так неисправленные баги, например, этот или этот не потеряются.

UPD: Кажется, баг исправлен.

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

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

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

Разбор задач контеста. Если что будет непонятно, смело пишите в комментариях! :)

Tutorial is loading...
Код
Tutorial is loading...
Код
Tutorial is loading...
Код
Tutorial is loading...
Код
Tutorial is loading...
Код
Tutorial is loading...
Код

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

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

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

Привет, Codeforces!

Завтра, 15 ноября 2016 в 19:35 (время московское) состоится очередной Codeforces раунд для участников из второго дивизиона. Как обычно, участники из первого дивизиона смогут поучаствовать вне конкурса.

Автор контеста — я (gepardo). Это мой первый раунд, и, надеюсь, не последний. Огромное спасибо Глебу Евстропову (GlebsHP) за помощь в подготовке контеста, Андрею Календарову (Andreikkaa) за тестирование раунда и Михаилу Мирзаянову (MikeMirzayanov) за великолепные платформы Codeforces и Polygon.

Как обычно, участникам будет предложено 6 задач и два часа на их решение. Рекомендую прочитать условия ВСЕХ задач. Желаю всем побольше Accepted'ов, и, конечно же, получить удовольствие от решения задач.

Задачи будут про моего младшего брата Антона. Надеюсь, они вам понравятся :)

Раунд рейтинговый.

UPD: Все-таки раунд будет не совсем обычный, и в нем будет 6 задач.

UPD2: А вот и разбалловка: 500-750-1250-1500-2000-2750.

UPD3: Разбор опубликован.

UPD4: Контест закончен, поздравляю победителей :)

Div. 2

  1. Octotentacle

  2. CisnijAsdPawel

  3. VemMonstro13

  4. fulvioabrahao

  5. Mehrdad_S

Div. 1

  1. sugim48

  2. uwi

  3. khadaev

  4. HellKitsune

  5. Um_nik

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

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