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

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

UPD: Спасибо Дарье nooinenoojno Степановой, Михаилу awoo Пикляеву и Артему Rox Плоткину за помощь с подготовкой раунда!

UPD2: Разбор опубликован!

<almost-copy-pasted-part>

Привет! В 22.10.2019 17:35 (Московское время) начнётся Codeforces Round 595 (Div. 3) — очередной Codeforces раунд для третьего дивизиона. В этом раунде будет 6 или 7 задач (или 8), которые подобраны по сложности так, чтобы составить интересное соревнование для участников с рейтингами до 1600. Однако все желающие, чей рейтинг 1600 и выше могут зарегистрироваться на раунд вне конкурса.

Раунд пройдет по правилам образовательных раундов. Таким образом, во время раунда задачи будут тестироваться на предварительных тестах, а после раунда будет 12-ти часовая фаза открытых взломов. Я постарался сделать приличные тесты — так же как и вы буду расстроен, если у многих попадают решения после окончания контеста.

Вам будет предложено 6 или 7 (или 8) задач и 2 часа на их решение.

Штраф за неверную попытку в этом раунде (и последующих Div. 3 раундах) будет равняться 10 минутам.

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

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

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

Спасибо MikeMirzayanov за платформы, помощь с идеями для задач и координацию моей работы. Спасибо моим очень хорошим друзьям Михаилу awoo Пикляеву, Максиму Neon Мещерякову и Ивану BledDest Андросову за помощь в подготовке и тестирование раунда.

Удачи!

Также хочу сказать, что участники, намеренно отправляющие неверные решения и взламывающие их после окончания соревнования (пример), не будут показаны в таблице лидеров по взломам.

</almost-copy-pasted-part>

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

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

I wish you all good luck

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

hope this contest becomes my last official participation in DIV3.

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

I hope become pupil

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

Good luck to everyone. I hope this round will be an exciting contest without dots attacks and lots of hacks. Finally I hope the problems will be solvable and understandable.

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

Div-3 is Love... True Love... Pure Love...

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

Love Vovuh's Contest

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

Fitness challenge: I'll do one pull up for every rating point lost and I'll do 3 pushups for every point won. Feel free to join the challenge under your conditions.

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

I think you should take part in some contests to become master. It's more beautiful ^^

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

Why Div3 get so little upvotes :(

Are we just used to them?

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

Which problem has two subtasks? @vovuh

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

Why do Vovuh conducts only Div.3? I don't like him.

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

Hi! I decided to simplify one of the problems and divided it into easy and hard versions. That's why I increased the round duration to 2:15. Don't afraid of formally too many problems in the round. You shouldn't think about easy/hard versions as about two independent problems. And good luck!

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

    Very good idea to divide problems into parts. Sometimes, even after solving the problem, it requires additional data structures or optimizations. This way even partially correct solutions that are slower than intended get partial points.

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

      Another idea is creating one problem with different types of tests. Solutions can first get tested on small tests, and then on bigger numbers. And if it passes small tests, contestant can get partial verdict. This has been done in several rounds, to it is possible. It is just easier to navigate this way, instead of solving 2 same problems

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

I will AK this contest !

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

Vovuh, the half-quarter!

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

Good luck!

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

I want to improve myself~

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

There's an expert participant in the trusted participants rankings, by the way.

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

Contest is over. It was a good contest.

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

I solved 7 problems for the first time. Feel amazing >__< !!

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

Can somebody explain test case 2 in F?

Thanks

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

How to solve C2 ?

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

How to solve D2?

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

What was test case 14 of D1?

Also, how where you supposed to solve D2? I thought using a BinaryIndexedTree, but I wasn't sure how to implement.

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

What is Test 11 for Problem E?

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

Isn't Meet in the Middle expected solution for C2. My solution got TLE on test 7

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

I solved only 2 problems. Will my rating will increase or decrease? The problems were easy but I couldn't cope up with the constraints leading TLE

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

How to solve F?

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

I think this round is easier usual Div 3 round.

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

Any Penalties on Unsuccessful Hacking Attempts?

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

The moment I realized that the comparator used by me is wrong in D1/D2 after printing all the values for an hour...........

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

Anyone tell me why this code gives TLE? 63189145

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

What's wrong with this solution for F — dp[node][level] = answer for subtree rooted at 'node' such that among all selected nodes the smallest depth is at 'level'? This recieved WA-3

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

After seeing constraint I thought greedy won't work for C2 so wasted one hour to implement Bit Mask+ Meet in the middle.Lesson learned. -_-

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

My solution for $$$F$$$:

Root the tree at node $$$1$$$. Let $$$dp[i][j]$$$ be the maximum subset weight for the sub-tree rooted at node $$$i$$$ if the nearest node in the subset to $$$i$$$ is at distance $$$j$$$ from it. Let $$$mxdp[i][j]$$$ be $$$max(dp[i][k])$$$ for $$$k$$$ from $$$j$$$ to $$$n$$$.

How to fill $$$dp$$$?

$$$dp[i][0]=a[i]+\sum_{c}mxdp[c][k]$$$ where $$$c$$$ is every child of $$$i$$$.

$$$dp[i][j]$$$ (for $$$j$$$ from $$$1$$$ to $$$n$$$) $$$=max(dp[c_1][j-1]+\sum_{c_2!=c_1}mxdp[c_2][max(k-j,j-1)])$$$ where $$$c_1$$$ is every child of $$$i$$$, and $$$c_2$$$ is every other child of $$$i$$$.

The answer is $$$mxdp[1][0]$$$.

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

In D why remove segments from longest to shortest length is wrong?

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

Сложные у вас задачи в Div 3, несколько лет назад такие в Div 2 давали. F точно лишняя, да и D и E далеко не подарок, если за новичка катать. Может, Div 4 надо делать?

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

    Толсто, чел. Между делом, я помню, что ты как-то хотел сделать свой "образцовый" Div. 3, чтобы показать этим саратовцам, как их нужно делать правильно. И что-то я его до сих пор не вижу.

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

      Что толстого-то? Эти соревнования позиционируются как соревнования для новичков, а чтобы решать D и E с сегодняшнего, надо не меньше года заниматься.

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

        Толсто то, что ты не видишь корреляции между количествами AC в Div. 2 и Div. 3. Сколько ни занимался, почти во всех Div. 2 раундах закрывалось несколько официальных участников и около сотни-двух решало все задачи, кроме одной. Можешь посмотреть по ранклисту, что и в этом, и во многих других Div. 3 раундах именно так и есть. Неужели ты предлагаешь сделать Div. 3 такими, какими они были в самом начале, где закрывалось 600+ человек и про них начали говорить "о, очередной Div. 3, ну это изи 1600+". В чем смысл этой затеи и в чем проблема со сложностью сейчас?

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

          Мне кажется, что не круто, когда новичок впервые заходит в Div 3 и решает в нем 1 из 6.

          Отвечая на предыдущий коммент, я не хотел сделать образцовый Div 3. Его уже сделали, смотри: Codeforces Round 481 (Div. 3)

          А если человек решает в "изи 1600+" раунде все задачи, почему бы и не дать ему эти 1600?

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

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

            Если новичок приходит на раунд и решает одну из шести, учитывая, что задача B1 из сегодняшнего раунда — это задача "просто напиши хоть как-нибудь то, что сказано в условии", то, может быть, ему стоит задуматься, правда ли он знает хотя бы основные конструкции языка? Потому что единственное, что нужно было, чтобы сдать B1 — это знать циклы и массивы. Тогда, возможно, это должно мотивировать становиться лучше, чтобы решать хотя бы те задачи, в которых просят просто написать.

            Видимо, ты хочешь превратить сайт с олимпиадными задачами по программированию (часть сайта) в курс "научись писать хоть какой-то код"? Какой в этом смысл?

            И чем раунд, на котором закрывается 200 человек, а еще 300 решают все, кроме одной, так хорош, когда он почти никак (кроме скорости печатания) не может отделить топ-500 участников друг от друга?

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

Is there anyone else, who used meet in the middle in C2. my solution

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

how to solve B2?

»
7 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
 ll n;cin>>n;ll temp=n;
        int idx=0;ll mn_diff=LONG_MAX;
        while(psm[idx]<n)idx++;
        // dbg(pt[idx]);
        for(int cnt=idx;cnt>=0;cnt--,idx--){
            mn_diff=min(mn_diff,pt[idx+1]-n);
            if(n>psm[idx])break;
            if(n>=pt[idx])n-=pt[idx];
            if(n==0)mn_diff=0;
        }
        cout<<temp+mn_diff;nl;

i was getting wrong answer using mn_diff=LONG_MAX, is it wrong to use LONG_MAX for std::min function in c++, but also it gave correct answer on my compiler.

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

For problem E, could anybody tell me why PyPy 2 TLEs but PyPy 3 ACs?

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

My approach for problem D1 is keep removing the segments intersecting with maximum number of bad points .Is this approach correct ? My submission is giving wrong answer though My Submission

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

Hack case for B?

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

The problem-set contained better stories than all of my films combined.

»
7 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
How to prove this solution ?
»
7 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

In problem C2

	// Wrong Answer 
	/*
	for(int i = 0 ; i < 40 ; i++){
		my[i] = (int)pow(3LL,i) ;
	}
	*/
	// Accepted Solution 
	my[0] = 1 ;
	for(int i = 1 ; i < 40 ; i++){
		my[i] = my[i-1] * 3LL ;
	}
	//

This is my AC Code 63196491

what is wrong with this line my[i] = (int)pow(3LL,i) ;

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

thanks for this amazing contest:)

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

thanks for this amazing contest :)

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

Sorry for my bad english, but the user named AHR9N has cheated, he asked me for the code of the problem B2, but I did not send. I think he needs to be severely punished

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

Oh,I can't get problem c2,problem c2 and problem e by using m2.codeforces in this contest. It told me that the statement is available.

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

Can anyone give me the solution of Problem B2 using DSU.

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

Can anyone give me the solution of Problem B2 using DSU?

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

In question https://codeforces.me/contest/1249/problem/A A. Yet Another Dividing into Teams from equation it means that difference should not be 1. Statement says difference should be strictly greater than 1. And test cases are aiming just for difference not equal to 1. There is a bit ambiguity . As for input 1 1 1 1 1 1 Answer should be 5. In test cases answer is either 1 or 2.

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

Is the round unrated? Why the ratings are not updated ?

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

Problem F is basically the same as BOI 2017 day 2 "Cat in a tree"

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

Edit: I was mistaken, please ignore.

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

If I modify problem A to..like find minimum number of teams you can form if no two students i and j such that |Ai-Aj|<=k may belong to the same team (i.e. skills of each pair of students in the same team has the difference strictly greater than k).
So if N be the no of students then I can solve it in O(NlogN + Nk^2). is there ant faster approach if any one can suggest???

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

    Maintain a sorted array. Pick the first element(lets say a), then find the upper bound of a+k. Keep on doing the same thing for this new element until you reach end of array and also maintain the elements which have been allocated a team. Pick the next element in the sorted array which has not been allocated a team yet and repeat the above steps and increment the number of teams. This approach should be O(NlogN).

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

Why have the rating changes been temporarily rolled back ?

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

Stop naming test cases as "queries", ffs.

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

So when on earth can our rating be back?

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

I got plagiarism mail for the following solution coincided https://codeforces.me/contest/1249/submission/63187125 with another guy solution. However my first accepted solution for this problem was https://codeforces.me/contest/1249/submission/63184980. So the thing of plagiarism, I guess is completely irrelevant.

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

Is it ok, what a few participants 1600+ rating got it updated after contest?

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

i try to solve D1 by using activity selection problem but it gives me WA on test case 14.

so i would do activity selection for K times and of course for each activity selection it will gives you as many as segments which not intersect with each other.

if you do it for K times then you will get points which covered at most K times, i couldn't think the corner case for my solution.

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

Can someone please check my F code. Its failing on the 38th case. https://codeforces.me/contest/1249/submission/73195435