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

Автор Atef, 15 лет назад, перевод, По-русски
Всем привет,

Сегодня мы рады пригласить вас принять участие в раунде #83, составленном по мотивам нашей подготовки к ACM в прошлом году, когда 
Dima был в гостях у German University in Cairo (GUC).

Мы подготовили набор задач про жизнь в Египте и GUC. Надеемся, вам понравится :) Разбалловка задач в Div 1 & 2 стандартная: 500-1000-1500-2000-2500.

Авторы задач: 
Dima и я. Спасибо всем, кто помогали нам готовить контест: RADConnectorit4.kpDelinurи MikeMirzayanov.

Желаем вам приятного, познавательного и интересного соревнования!

Всем удачи!
  • Проголосовать: нравится
  • 0
  • Проголосовать: не нравится

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

Жизнь в Египте? Должно быть интересно)
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Давно не было контестов для див.1, подготовленных фиолетовенькими.
Это только доказывает, что рейтинг вещь весьма субъективная.
Должно быть интересно.
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
No. of pariticipants Div 1 and Div 2 are imvalanced. 371 : 1006
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Am i able to unregister now?   
15 лет назад, скрыть # |
Rev. 2  
Проголосовать: нравится 0 Проголосовать: не нравится

Мне ответили что второй претест в первой задаче это второй семпл,  мой код работает в запуске , а в системе получет ошибку исполнения id посылки 627968
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Ой, как плохо... :( Перенести контест на день ближе и не предупредить об этом отдельно, и не обратить на это внимание. Я понимаю, что в письме, которое пришло было указано 23-е число, но я до туда просто не дошёл, я смотрю КФКонтест83... мысль: ага, помню. До даты даже не дошёл. Я думаю не я один такой, кто так профэйлился.

... печаль :(

15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
It's very weird...
I swear that I've seen the time yesterday and it was 08/23/2011 08:00PM
I miss this game now....
I was torn!!!
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
в задаче C, последнем примере, проверьте выходные данные
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
when a solution gets hacked and a contestant resubmits.. is his code tested on the hacking test case also??
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Почему мои хаки уже минут 5 виснут?
15 лет назад, скрыть # |
Rev. 2  
Проголосовать: нравится 0 Проголосовать: не нравится

Ну, в первом дивизионе задачи получились "чуть-чуть" несбалансированными.
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
In my opinion, this contest in div1 was not so good. Very easy problems A and B with really difficult problems C, D, E. As a result more that 200 participants solved A and B and only time to divide them. Of cource, I'm understand that it's really difficult to think of tasks.
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Как вторую делать не через цешки? 
  • 15 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится
    Посчитать вероятность того, что в составе сборной не окажется ни одного человека с его факультета, и вычесть это число из единицы
  • 15 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится
    Решение через цэшки, только нужно оптимально их считать.

    Нужно посчитать C(x, z) / C(y, z) = x! * z! * (y - z)! / z! / (x - z)! / y! = ((y - z)! / y!) * (x! / (x - z)!) =
    = (x - z + 1) * (x - z + 2) * ... x / ((y - z + 1) * (y - z + 2) * ... y)

    Чтобы не было переполнений в double или long double, бежим по циклу и считаем так:
    res = 1;
    FOR i: res *= (x - z + i) / (y - z + i)
  • 15 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится
    К примеру, можно так.
    Пронумеровав всех на целевом факультете будем делать для каждого на факультете, кроме начального игрока, такое.
    К ответу прибавляем вероятность того, что все предыдущие с этого фака не попали, а этот (и возможно, кто-то следующий) попал.
    Получается примерно так.
    for (int i=0; i<Q-1; i++)
    {
    res+=prob*(N/(S-i-1));
    prob*=1.0-(N/(S-i-1);
    }
    Q - к-во на целевом факультете, N - размер команды без 1 (наш участник), S - сумма людей на всех факах.
    То есть, также храним вероятность того, что предыдущие не попали, и обновляем ее каждый раз.
    P.S. Для правильности вычислений, prob изначально равно 1.0

  • 15 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится
    Вообще говоря, её можно было красиво (на мой взгляд) решать рекурсией:

    f(a,b,n) = вероятность взятия n элементов из (a+b) элементов так, что будет взят хотя бы один элемент из a.

    Тогда
    f(a,b,0) = 0
    f(a,b,n) = a/(a+b) + b/(a+b)*f(a,b-1,n-1)
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Как решать D(div 2)/B(div 1)? 6 раз WA 5 почему-то
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Кто-нибудь объяснит мне, почему в задаче D на второй тест ответ 113, а не 143?

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

Я ручками возвёл матрицу в D в шестую степень и там нет нигде числа 113 и в помине.

Хотя вот тут товарищи говорят, что всё правильно. Пойду курить, где ошибка...
  • 15 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится
    у меня тоже было временно такой ответ, исправил баг, стал 113, 10 минут не хватило что-бы засабмитить...
  • 15 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится
    Могу предложить альтернативное решение (на контесте меня от полного решения отделила строчка int n; , только исправил на long long и в дорешке зашло).

    Будем делать нечто вроде meet in the middle и хранить все полученные результаты в map. Состояние - это число преступлений которые мы хотим совершить и набор остатков, которые хотим получить - пилим n пополам, перебираем всевозможные способы "склеить" нужные остатки и складываем.
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
I was confused in first task reading that the hero is egyptain and reads from right to the left. What for it was said?? 
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Я буду внимательно читать условия

Я буду внимательно читать условия

Я буду внимательно читать условия

15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Кто нибудь может обьяснить, почему код юзера nagochan по задаче B работает? Вот ссылка. Проверял локально на тесте, в котором в команде 100 человек, есть 1000 факультетов по 100 человек в каждом, а наш герой принадлежит первому факультету. Прога дает неверный ответ. А на сервере кодфорсеса - верный(проверял неудачным взломом + после контеста на запуске).
15 лет назад, скрыть # |
Rev. 2  
Проголосовать: нравится 0 Проголосовать: не нравится

Ламал решения по В, в которых отдельно умножались числители дробей и знаминатели--как не странно прошли:)
Но разве double в С++ удержыт столь оргомные числа ?

Сколько не пытался локально решить на своём тесте - Runtime Error, или какие-то непонятные символы в выводе.

upd: Один с кодов
  • 15 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится
    Я взламывал kcm1700 , у которого явный выход за пределы массива - 100 вместо 1000. И это работает. Где segmentation fault, спрашивается?
  • 15 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится
    Это следствие работы оптимизатора. Результаты промежуточных вычислений не заносятся в переменную res типа double на каждой итерации, а остаются в 80-битных регистрах сопроцессора (FPU), а разрядности этих регистров (числа бит в порядке, в первую очередь, а не в мантиссе) достаточно для хранения больших чисел, которые возникают в этой программе.

    Благодаря такому решению оптимизатора и точность получается выше, и скорость работы кода возрастает (нет лишних пересылок между регистрами и памятью и нет операций преобразования вещественных чисел из 64-битного формата в 80-битный и обратно). В обычной жизни такое поведение компилятора может только приветствоваться, но здесь оно приводит к неочевидной невозможности взлома.

    Если выключить оптимизацию (убрать ключ -O2) или добавить спецификатор volatile перед "double res = 1.0;", программа действительно начинает работать неправильно. По крайней мере, так получилось у меня, компилятор g++ 4.5.0.
  • 15 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится
    Да там, я думаю, хоть треугольником Паскаля можно. Нам же не надо все число держать, только его первые несколько цифр. Дабл с этим прекрасно справляется.
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
А на чём все ломали A div 1? Неужели на локальных вершинах?
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Are the Java solutions for problem A going to be rejudged?
I sent Java solution for problem A and I got "runtime error", I sent again the same solution few minutes after and I got Accepted, but I guess some points are lost for "wrong" submission.
I noticed the message during the contest that there was some problem with "runtime error" with Java solutions on task A. After the contest I saw that the my first "runtime error" solution was tested again, this time with "Accepted" but I think the points remained the same...
Thanks in advance

15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Хотел взломать одно решение задачи B div. 2 антиQuickSortом, но генератор слишком долго генерил его. Кто-то может дать код антиQuickSort, который работает достаточно быстро, чтобы его можна было отправлять в качестве генератора?
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Will the contest be "cancelled" for Java users ? I had to resubmit problem A without understanding what was wrong and my B and C failed too (I am not denying that they can be wrong... but it is hard to debug something when the systems preliminary test is not reliable).
15 лет назад, скрыть # |
Rev. 2  
Проголосовать: нравится 0 Проголосовать: не нравится
Please Everyone take a look --->

Which one is better translation ??

---------------------------------------------------------------------------------------------------
"Herr Wafa was also able to guarantee a spot on the team, using his special powers. But since he hates floating-point numbers, he needs your help at finding the probability that he will have at least one teammate belonging to his department."

OR

"Due to their paranormal abilities, Mr. Wafa knew that he really gets into the team GUC. Now he wants to calculate the probability that with him in the team will be at least one student in his department. Since he does not like to calculate with fractional numbers, the task entrusted to you. "
---------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------
In the third example, there are three possibilities to compose the team containing Herr Wafa. In two of them the other player from Herr Wafa's department is part of the team.

OR

In the third example, a team which includes Mr. Wafa, can be made in three ways, two of these three comprise the second player from the Faculty of Mr Wafa.
---------------------------------------------------------------------------------------------------

Comparison of problem setters translation and GOOGLE's translation.
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Why the System-testing didn't run yet?
15 лет назад, скрыть # |
Rev. 2  
Проголосовать: нравится 0 Проголосовать: не нравится

У меня, кстати, пропал куда-то неуспешный взлом(если верить общей таблице). Но если смотреть результаты друзей, то он все еще виден. Странно. 

UPD: Прошу прощения, ошибся.
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Do I lose a lot of presision by writing
p *= (long double)a/b; instead of
p /= b;
p*=a; ?
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Контест удался. Спасибо авторам за интересные и читаемые задачи!
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Так как во время контеста были некоторые проблемы с тестированием решений на Java, то в этом контесте все успешные, но не последние посылки (на претесты) не приводят к дополнительному штрафу, а игнорируются. Еще раз приносим извинения за доставленное неудобство.
=
Since during the contest, there were some troubles with testing Java solutions, all "pretests passed" (except last) submissions do not decrease score, such submissions are ignored. Once again, we apologize for any inconvenience.
  • 15 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится
    Will it be rated?
    ===
    Будет ли контест рейтинговым?
    • 15 лет назад, скрыть # ^ |
       
      Проголосовать: нравится 0 Проголосовать: не нравится
      It seems yes. It will be rated. If Java issue affected somebody for 10 minutes of more, we can make the contest unrated for him/her. This fact should be proved by submissions log.
      ===
      Похоже, что да. Контест будет рейтинговым. Если на кого-то сильно повлияла эта проблема (10 минут и более), то для него мы можем сделать участие внеконкурсным. Этот факт должен быть доказан логом посылок.
  • 15 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится
    It is written that such submissions are ignored, but having submitted the accepted solution at 19th minute (after the first ignored submission "00:16:40  Skipped [pretests]" at 16th minuted because of the problems with testing Java solutions) I get 412 points, and other coders get for example 458 points for accepted submission in the 21 minute...

    Will the submissions be rescored after the end of System Testing...?

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

What happenes, if I submit a task several times? (all pass pretests)
What if the first is correct submision, but not the second?
How score is calculated?
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Моё Полное решение по задаче B на тест "3 1 2 3" выдаёт "NO".
Кажется мне повезло, или я не прав, что у меня не верно решена задача.
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
problem D ,div 2
is it a Combinations problem?
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Задача C div 1 напоминает twofive с IOI 2001.
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Can anybody explain - why the answer for
7
1 2 3 4 8 16 32
in B (div 2) is Yes?

if we use x=6553510=11111111 11111111 2 we will get x*x=429483622510 = 11111111 11111110 00000000 00000001 which fits in 32 bits

15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
По какому принципу происходит распределение по комнатам?
К примеру, в мою комнату (# 7) попало 9 красных: из них 2 не участвовало, а 5 из 7 оставшихся заняли 1, 2, 7, 10, 18 в общем зачете.
В то же время в комнату # 8 попало всего 4 красных, из них участвовало 3.
Сегодняшний раунд был богатым на взломы и в тех комнатах, где было меньше опытных участников, было проще взламывать - в моей же комнате Coder вынес почти все неправильные решения по А в начале контеста, так что дальше и нечем было особо поживиться.
Может, имеет смысл проводить распределение по корзинам, а из каждой корзины по одному участнику в комнату рандомно? Например, как это делается при жеребьевке футбольных турниров. В каждой группе оказывается по одной сильной команде (из первой корзины), по одной послабее (вторая корзина) и так далее.
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Спасибо за контест! В третьей задаче расширил границы массива с [1..1000] до [0..1000] и все прошло! :), буду заводить массивы начиная с нуля теперь!
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Спасибо за отличный контест. Жалко я его слил
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

задача В. (див. 2)

7
1 2 3 4 8 16 32

почему правильный ответ YES?

ведь FFFF x  FFFF = FFFE0001. в 32 бита влазит.

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

It's very good for participant, when his solution is hacked during contest. Someone just do your job. Thank to him. Today i made a big mistake, having written 105 = 10000 :)_)

It's a pity noone hacked my solution... It failed to pass system tests...

If your sols is hacked, will you lose more point then if you just fail to pass pretests??

15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Мде, одного пункта рейтинга до оранжевенького цвета не хватило :-)
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Спасибо авторам за задачи которые я мог решить, но не решил... на таких мне надо тренироваться...
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
the test case for problem E in DivI I is so weak...
The passing java code during the contest didn't handle the 
case that there's a rectangle in a empty space surrounding by other rectangles..
Some Sample:

5

0 0 3 0 3 3 0 3

6 0 9 0 9 3 6 3

6 6 9 6 9 9 6 9

0 6 3 6 3 9 0 9

4 4 5 4 5 5 4 5

It gives 1.0571428571428572

obviously the answer is 1

15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
А когда разбор задач будет???
15 лет назад, скрыть # |
Rev. 3  
Проголосовать: нравится 0 Проголосовать: не нравится

не туда
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
а разбор задач будет