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

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

Привет!

Вот и пришло время очередного раунда Codeforces, а именно раунда номер 129. Он состоится 11.07.2012 в 19:30 (по Москве). В этот раз задачи для Вас готовил я. В далеком прошлом я уже был 4 раза автором задач для Codeforces, тогда задачи были в основном о счастливых числах. Но ничего не вечно, поэтому в этот раз не будет задач о счастливых числах и тематика задач будет различной.

Помогал мне готовить задачи Геральд Агапов (Gerald), Александр Куприн (Alex_KPR), Аксёнов Виталик (Aksenov239), а традиционно задачи перевела Мария Белова (Delinur), за что им всем спасибо.

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

Держитесь!

Спасибо всем за участие. Результаты оказались следующими:

Div1:

  1. tourist (теперь tourist первый в мире таргет Codeforces, с чем его поздравляем)
  2. winger
  3. RAVEman
  4. rng_58
  5. RAD
  6. bmerry
  7. Shik

Div2:

  1. xiaoshua2
  2. ahm.kam_92
  3. HanzhongBall_Quanling
  4. daidailanlan

Разбор задач можно найти здесь.

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

»
14 лет назад, скрыть # |
 
Проголосовать: нравится +10 Проголосовать: не нравится

Так рано анонс, это радует)

»
14 лет назад, скрыть # |
 
Проголосовать: нравится -31 Проголосовать: не нравится

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

»
14 лет назад, скрыть # |
 
Проголосовать: нравится +22 Проголосовать: не нравится

Although there is no lucky problem but the round itself is lucky. 129=7+74+44+4 isn't it? :)

»
14 лет назад, скрыть # |
 
Проголосовать: нравится -21 Проголосовать: не нравится

hope this time problem set will have good English translation.. I have seen that sometimes GOOGLE TRANSLATOR give better translation.. that time i am trolled.. :|

»
14 лет назад, скрыть # |
 
Проголосовать: нравится -15 Проголосовать: не нравится

Good luck in the lucky round!

»
14 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Как решалась С лучше, чем за квадрат? Судя по количеству ее решивших, я не вижу что-то ОЧЕНЬ простое...

  • »
    »
    14 лет назад, скрыть # ^ |
     
    Проголосовать: нравится +2 Проголосовать: не нравится

    нам нужно для каждой пары равных символов посчитать в скольких строках они могут совпасть.

    Переберем символ в первой строке, бинпоиском найдем первый такой же во второй строке после. Разделим наши суммы для символов до него и после. Они свернутся

  • »
    »
    14 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится

    Допустим, хотим посчитать в скольких парах строк i и j будут сравниваться, если i<=j то count = i*(n-j+1). Теперь переберем номер первого символа i и найдем сумму всех ему равных во второй строке: A[i]=B[j], S=n-j+1, j>=i. Это можно пред посчитать заранее. Аналогично когда i>j. Еще нужно делить сразу на кол-во возможных пар число, которое добавляем (может выйти переполнение).

»
14 лет назад, скрыть # |
 
Проголосовать: нравится +5 Проголосовать: не нравится

Правда ли что это решение E:

строим общий суфмас для всех строк хешами за nlog^2. Потом проходим по нему двумя указателями поддерживая чтобы на отрезке [l,r) были "представители" k строк, добавляем lcp всех строк на отрезке(а значит первого с последним)(посчитаный за лог хешами) — lcp с предыдущего добавления.

»
14 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Нескольких секунд не хватило, чтобы сдать C. Отличный контест, попотеть пришлось, и немало.

»
14 лет назад, скрыть # |
Rev. 2  
Проголосовать: нравится +2 Проголосовать: не нравится

На чем ломали C? А то мне как-то страшно за свое вроде бы безбажное решение )

»
14 лет назад, скрыть # |
 
Проголосовать: нравится +14 Проголосовать: не нравится

nice short problem statements ; easy to understand ..Liked the contest :)

»
14 лет назад, скрыть # |
 
Проголосовать: нравится +8 Проголосовать: не нравится

Классные задачи. Автору респект. Жду тестирования.

»
14 лет назад, скрыть # |
 
Проголосовать: нравится +2 Проголосовать: не нравится

cite from DIV2.D (second sentence of statement): He has n cards, each has exactly two colors

and the last one of input section: The color of the front of the card may coincide with the color of the back of the card

In my opinion word exactly mean that both colors must differ...

»
14 лет назад, скрыть # |
Rev. 3  
Проголосовать: нравится +5 Проголосовать: не нравится

Благодарю за задачи, раунд замечательный! Особенно E понравилась.

Должно ли в E заходить решение за n·log2(n)? Конкретно: построим суффиксный массив на строке a1#1a2#2...#n - 1an, найдем LCP. Теперь для некоторой строки мы хотим узнать, какой наибольший ее префикс удовлетворяет условию (то есть принадлежит как минимум k различным строкам). Делаем бинпоиск по длине префикса, смотрим на LCP, получаем некоторый отрезок в суфмасе. Теперь нужно узнать количество различных чисел на нем. Это делаем персистентным деревом отрезков. Вроде бы оба логарифма (бинпоиск + дерево отрезков) довольно быстрые, в три секунды должно отлично зайти. Еще было бы интересно послушать решение суфдеревом.

  • »
    »
    14 лет назад, скрыть # ^ |
    Rev. 2  
    Проголосовать: нравится +2 Проголосовать: не нравится

    Казалось бы, можно решить суфмассивомсуфдеревом. Построили для такой же строки (может быть, потребуется сделать все разделители различными, чтобы не пересекались). Для каждой вершины посчитали количество достижимых '#'. Если >= k — сделали пометку. Пробежались по всем '#', посчитали сколькими способами можно добраться в неё из помеченной.

    • »
      »
      »
      14 лет назад, скрыть # ^ |
       
      Проголосовать: нравится 0 Проголосовать: не нравится

      Суфдеревом, ты хотел сказать? Да, действительно. Только сейчас понял, что насчитать количество различных чисел в поддереве можно в офлайне. Я чего-то затупил и не сразу понял, как это делать. По модулю этого все понятно. А разделители у меня все различные, сейчас это отмечу.

    • »
      »
      »
      14 лет назад, скрыть # ^ |
       
      Проголосовать: нравится +8 Проголосовать: не нравится

      Да, # нужно сделать различными. У меня такое решение, а суфдерево строю по суфавтомату.

  • »
    »
    14 лет назад, скрыть # ^ |
     
    Проголосовать: нравится +10 Проголосовать: не нравится

    Все так, только без персистентных структур — нам не нужно количество различных в подотрезке, а только не меньше ли оно за k. Для этого для каждой позиции i с помощью сетов найдем минимальный индекс j такой, что подмассив [j;i] содержит ровно k различных (пусть это F(i)). Потом для какого-то отрезка [l;r] проверка это будет просто: l ≤ F(r).

    • »
      »
      »
      14 лет назад, скрыть # ^ |
       
      Проголосовать: нравится +3 Проголосовать: не нравится

      Хм, и правда. Персистентное дерево я набил быстрее, чем придумал, как логарифм выкинуть :) Кстати, зачем при подсчете F(i) сеты? Вроде бы можно насчитать просто двумя указателями, поддерживая каждый раз массив cnt[i] (сколько раз на отрезке встретилось число i). Впрочем, этот логарифм сетов на итоговую асимптотику все равно не влияет.

  • »
    »
    14 лет назад, скрыть # ^ |
     
    Проголосовать: нравится +18 Проголосовать: не нравится

    Вообще говоря, количество различных чисел на отрезке — это тоже классическая задача для дерева отрезков. Давай научимся учитывать от каждого класса эквивалентности только самое правое число попавшее в отрезок. Чем оно характерно? Тем, что ближайшее к нему справа уже находится за пределами отрезка. Ну так давай заменим каждое число на позицию ближайшего справа равного ему — тогда запрос примет вид "количество чисел на отрезке [l, r], которые больше чем r" — его ты, наверное, умеешь делать.

    • »
      »
      »
      14 лет назад, скрыть # ^ |
       
      Проголосовать: нравится 0 Проголосовать: не нравится

      Макс, а я думал, персистентное дерево отрезков — как раз классическое решение :) Я научился это решать, когда мне "Откат" с ВКОШПа рассказали. Ну, в любом случае, перситентное дерево я напишу быстрее, чем partial cascading (решение твоей задачи за log; если не ошибаюсь, именно так называется). Да и работает персистент быстрее, насколько я тестил, хотя здесь спорить не готов.

»
14 лет назад, скрыть # |
 
Проголосовать: нравится +2 Проголосовать: не нравится

Проклял в задаче D тест:

5
1 1
1 1
3 4
5 6
7 8

сдал... на 450 =D жесть... а столько времени убил.

Контест классный!
Авторам спасибо!
Ждем от вас еще!

»
14 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Could anyone give a hint on how to solve 204C - Little Elephant and Furik and Rubik? Thanks!

  • »
    »
    14 лет назад, скрыть # ^ |
     
    Проголосовать: нравится +7 Проголосовать: не нравится

    First of all let xi and yj be the same letter in string X and Y respectively. The number of substrings of the same length in X and Y that contains xi and yj is: (1+prefixSize(min(i,j)) * (n-suffixsize(max(i,j)) in 0-based array Now for any matched xi and yj characters, find the number of all such substrings. this code runs in O(n^2) and obviously wouldn't fit in time. Consider that if j<i the above formula becomes (1+prefixSize(j))*(n-suffixSize(i)). So for each letter iterate over i and keep the summation of (1+prefixSize(j)) for all j<i using dynamic programming and multiply it by ((n-suffixSize(i)). do it again for j>=i and divide these values by the total number of sunstrings. be aware of overflow!

»
14 лет назад, скрыть # |
 
Проголосовать: нравится +2 Проголосовать: не нравится

Контест отличный! Спасибо авторам.

»
14 лет назад, скрыть # |
 
Проголосовать: нравится +53 Проголосовать: не нравится

Late system testing :( ?

»
14 лет назад, скрыть # |
 
Проголосовать: нравится +12 Проголосовать: не нравится

Название задачи E div 2, C div 1 повеселило. Маленький Слоник и Фурик(Furko) и Рубик(Rubanenko)

»
14 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

мне одному интересно, почему у iroro место проживания финляндия, она же вроде из россии?

»
14 лет назад, скрыть # |
 
Проголосовать: нравится +1 Проголосовать: не нравится

Кстати уведомление о взломе опять пришло очень незаметно. Заметил чисто случайно, не найдя себя в ожидаемом месте таблицы комнаты. Не хорошо это.

»
14 лет назад, скрыть # |
Rev. 2  
Проголосовать: нравится +11 Проголосовать: не нравится

Баг репорт:

У yeputons сейчас написано по C: Решение было взломано после блокировки.

На самом же деле, сперва оно было взломано, потом заблокировано и сейчас еще может зайти.

Ну и вообще, в таких ситуациях хочется видеть вопросик, а не (-x)

»
14 лет назад, скрыть # |
 
Проголосовать: нравится +39 Проголосовать: не нравится

While browsing through some of the solutions ,I found this amazing short one by winger for Div1-A/Div2-C..Very nice and simple solution that most of us missed:

public void solve() throws IOException {
		long l = nextLong();
		long r = nextLong();
		out.println(f(r) - f(l - 1));
	}
	
	long f(long x) {
		if (x < 10) {
			return x;
		}
		String s = Long.toString(x);
		return (x / 10 - 1) + (s.charAt(0) <= s.charAt(s.length() - 1) ? 1 : 0) + 9;
	}
  • »
    »
    14 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится

    Can anyone explain me the idea?

    • »
      »
      »
      14 лет назад, скрыть # ^ |
      Rev. 2  
      Проголосовать: нравится 0 Проголосовать: не нравится

      I have similar solution.

      F(x) is number of tens, which less or equal to X, and 9 (numbers 1..9). One thing — if first digit of x > last digit of x (examples — 51 (5 > 1), 623 (6 > 3)), we mustn't count last ten, so we subtract 1.

    • »
      »
      »
      14 лет назад, скрыть # ^ |
       
      Проголосовать: нравится +6 Проголосовать: не нравится

      Its simple..The function f(long x) returns the number of the numbers that have the same first and last digits. So if x < 10 then that all the single digit numbers less than x are what we are looking for and so x is returned .Otherwise u can see that for all the numbers whose length >=2 have the unit place digit will be equal to the highest order digit exactly ones in every 10 numbers .So we add x/10 to our result. -1 is because we dont want to add the single digit numbers and for them we add a +9. The remaining part is just for checking if the residue of the number when divided by 10 can also be used or not .

      Finally becuase we need to count that in the interval [l,r] we find f(r) and the subtract from it f(l-1)

  • »
    »
    14 лет назад, скрыть # ^ |
     
    Проголосовать: нравится +3 Проголосовать: не нравится

    Nice One !..

»
14 лет назад, скрыть # |
 
Проголосовать: нравится -11 Проголосовать: не нравится

what the AWESOME!! great problem-set.. :)

»
14 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

А тестирование меж тем стоит

»
14 лет назад, скрыть # |
 
Проголосовать: нравится +6 Проголосовать: не нравится

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

Я думаю уже можно:)

»
14 лет назад, скрыть # |
 
Проголосовать: нравится +33 Проголосовать: не нравится

My thanks to witua for the contest!

Does anyone have an idea what is 71 test (Div-1, B) about? Many java solutions failed with TLE on this tricky one.

»
14 лет назад, скрыть # |
 
Проголосовать: нравится -13 Проголосовать: не нравится

It's amazing that whenever I don't participate in a contest, It's EASY!!!

»
14 лет назад, скрыть # |
 
Проголосовать: нравится -6 Проголосовать: не нравится

Спасибо за отличный контест, интересные задачи и слоника)))

»
14 лет назад, скрыть # |
Rev. 3  
Проголосовать: нравится 0 Проголосовать: не нравится

Я, наверное, какой-то очевидности не замечаю. Вот посылка по задаче D(div. 2)/B(div. 1). И я не понимаю, почему она падает с ошибкой Runtime. Помогите, пожалуйста.

»
14 лет назад, скрыть # |
 
Проголосовать: нравится +81 Проголосовать: не нравится

tourist become first target!

»
14 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Виталик, отличный контест, особенно задача С div 1 :D !

»
14 лет назад, скрыть # |
Rev. 2  
Проголосовать: нравится 0 Проголосовать: не нравится

Один я не знаю что такое таргет? UPD я тупой(таргет — овер 3000)

»
14 лет назад, скрыть # |
Rev. 2  
Проголосовать: нравится 0 Проголосовать: не нравится

Div-2 анрейт?

»
14 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Наблюдаю симптомы unrated-раунда для div.2. Рейтинг был пересчитан — а теперь вновь "откачен" назад.

»
14 лет назад, скрыть # |
 
Проголосовать: нравится +3 Проголосовать: не нравится

А почему я синий с рейтингом 1489?

»
14 лет назад, скрыть # |
 
Проголосовать: нравится +7 Проголосовать: не нравится

Excellent competition, I enjoyed solving the tasks and they were all very clear. One of the better ones in a long while for me.

By the way, is there something wrong with my browser, or did all the rating changes in Div2 for this contest get removed? If so, when can we expect it fixed?

»
14 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

I only solved one problem... I will try to improve and get better, but shouldn't I have gained some more points on my rating? :)_

»
14 лет назад, скрыть # |
 
Проголосовать: нравится +6 Проголосовать: не нравится

what is wrong? div2 is unrated ?

»
14 лет назад, скрыть # |
 
Проголосовать: нравится +6 Проголосовать: не нравится

When will the rating be updated?

»
14 лет назад, скрыть # |
 
Проголосовать: нравится +6 Проголосовать: не нравится

If the round is being rejudged or unrated or something wrong with rating calculation, please post an announcement in the blog.

»
14 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Can anyone tell me why this code gets WA? Am I missing something tricky of Div2-A?

1885288

»
14 лет назад, скрыть # |
 
Проголосовать: нравится +4 Проголосовать: не нравится

I've changed color but not raiting.whats wrong?

»
14 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

For Little Elephant and Furik and Rubik (204C and 203E) I am getting a WA for http://codeforces.me/contest/204/submission/1894333

The test case that fails gives a negative answer. Am I running into overflow errors? Also what I have done is that I first collect the indices of all the alphabets into a 2D structure and then try to match the corresponding characters. Also is it possible to get the complete test case locally at which my solution fails. The testers shows the partial test case? (If not this functionality should be there).

»
14 лет назад, скрыть # |
 
Проголосовать: нравится +4 Проголосовать: не нравится

Why my rating does not change?

»
14 лет назад, скрыть # |
 
Проголосовать: нравится +1 Проголосовать: не нравится

У DULGUUNBATMUNKH цвет поменялся, а рейтинг так и остался 1500+, а у меня рейтинг вообще не пересчитался. Что за фигня опять происходит?

  • »
    »
    14 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится

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

»
14 лет назад, скрыть # |
 
Проголосовать: нравится +5 Проголосовать: не нравится

no change in rating...

»
14 лет назад, скрыть # |
 
Проголосовать: нравится +6 Проголосовать: не нравится

No one care the div2 participants's rating ? So irresponsible...

»
14 лет назад, скрыть # |
 
Проголосовать: нравится +3 Проголосовать: не нравится

DIV_2 the Rating is Updated !!!

»
13 лет назад, скрыть # |
 
Проголосовать: нравится +2 Проголосовать: не нравится

Liked the contest.

»
8 лет назад, скрыть # |
 
Проголосовать: нравится -8 Проголосовать: не нравится

How to solve Div-2 B, little elephant and sorting ? http://codeforces.me/contest/205/problem/B ?