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

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

TREMBLE BEFORE THE MIGHTY OMEGALULGRAPE

Hello Codeforces!

We are honored to invite you to Codeforces Round #538 (Div. 2), which will take place at Feb/10/2019 17:05 (Moscow time). The round will be rated for all Division 2 participants (with rating less than 2100). Still, we warmly welcome Division 1 participants to join us out of competition.

You will be given 6 problems to solve in 2 hours. The round's problems were initially prepared by Duy-Bach AkiLotus Le, Xuan-Tung neko_nyaaaaaaaaaaaaaaaaa Nguyen and Xuan-Quang xuanquang1999 D. Nguyen.

There will be an interactive problem in this round. Learn more about interactive problems here.

This is our first attempt in making a Codeforces round, so suggestions are much welcome to help us improve ourselves. ;)

We also want to thanks many friends for making this round possible:

  • Dmitry cdkrot Sayutin for coordinating the round, providing a neat idea on one problem and some Russian translations.
  • Andrew GreenGrape Rayskiy for various suggestions on the problems, some other Russian translations, and most importantly, peacefully submitted himself to be quarantined from pretests. ;)
  • Michal majk Svagerka for testing the round.
  • And last but not least, Mike MikeMirzayanov Mirzayanov for the amazing Codeforces and Polygon platform, without which this round would never be possible :D

P/s: I will be at the Discord CP Community to discuss the problems after the coding phase. However, please follow the rules and don't discuss the problems during the contest by any means.

Wish everyone good luck and high rating!

UPD1: Score distribution: 500-1250-1500-2000-2000-2750

UPD2: Editorial is published.

UPD3: The contest is finished. I apologized for the "somewhat" weak pretests at here and there. Anyway, time to celebrate our winners ;)

Official participants:

  1. xlk200
  2. vasilescu_mihai
  3. Cirno_9baka
  4. africamonkey
  5. 2019_BecameMaster
  6. cdsfcesf
  7. yww_AFO
  8. hr_tian_xia_di_2
  9. JZmster
  10. chinmay0906

Div.1 + Div.2 participants:

  1. Hazyknight
  2. tfg
  3. tempura0224
  4. xlk200
  5. sava-cska
  6. mango_lassi
  7. I_love_Tanya_Romanova
  8. ec24
  9. vasilescu_mihai
  10. Cirno_9baka
  • Проголосовать: нравится
  • +573
  • Проголосовать: не нравится

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

Congrats on your first round!

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

i don’t understand any of this can someone explain

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

GreenGrape everywhere...

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

Good Luck to All!

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

GreenGrape in two consecutive rounds, you must be joking

»
5 лет назад, # |
Rev. 2   Проголосовать: нравится -129 Проголосовать: не нравится

writing an announcement five days before a round -> bad round

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

Kuroyukihime round? awesome!

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

Vietnamese, raise your hand!!!!!

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

Good luck for your first round! I'm feeling some math here

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

I dont know if I can ask this, but which is the interactive problem? C, D, E or F ???

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

Did anybody notice that there are less comments than shown in the blog.

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

Dont worry guys Not every grape is Greengrape

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

romania!!! unite for this contest !!!

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

I hope the difficult gap between problems can be proper.More personally,I hope there will be a problem(maybe problem D) whose difficulty is between 1700 and 1900.In recent contests,the gap between C and D is always wide(such as 1500 and 2200),which is ,to be honest, unfriendly to me(rating between 1800 and 1900).In many contests,I pass the first three problems in 30 mins and cannot solve problem D in remaining time.

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

Interactive problem,I'm not good at it,sad... Hope it won't be too difficult.

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

They didn't complete surgery on GreenGrape

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

Just a random fact, GreenGrape has never been GreenGrape .

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

Why are there more and more Div2 rounds consisting of 6 problems nowadays? I think that this leads to more implementation and to less thinking. I think it's better when there is one interesting Div2E problem than 2 pure implementation Div2E and Div2F problems.

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

i will get grandmaster this round

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

I wished that there will be 6 nice problems and make me get some new skills in this contest. Thanks to the selfless dedication of the problem provivers.

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

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

Auto comment: topic has been updated by AkiLotus (previous revision, new revision, compare).

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

Good Luck to All!

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

What will be the pattern of the points of every problem?

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

what is pretest 10 for problem C?

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

    I think it breaks some overflow checkers, namely the ones that test if your new product is less than your old product. You can have overflow and still have the new product be greater than your old ones, and in this case I believe it is because they had some prime that was greater than 4e9 that was getting squared.

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

Pretest 12 E?

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

    RAND_MAX is 32767, u should extend it.

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

      Oh my god...

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

      So basically random_shuffle would not shuffle properly for N ≤ 106?

      If this is the case then it is really bad problem setting because this is not something of common knowledge and many people would have encountered this error even though the had the solution.

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

        Yes, but I think we can use some tricks to make it work in N<=1e6 even though it is not actually uniform distribution.

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

        "The problem is bad if it requires some knowledge that I don't have" doesn't sound like a reasonable approach to me. The fact that random_shuffle() isn't very random by default is important thing to know, and your comment sounds like "It is bad to expect us to know that cout<<endl; is slow" or "It is bad to expect us to know that cache misses are slowing things down".

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

          It seems many people had the same issue so it isn't really common knowledge that inbuilt randomisation in C++ does not work properly for sizes greater than 32767.

          I do not mean to disrespect the problem setters, but it does seem like this specific piece of knowledge is not known to many. Otherwise I would not have said anything like that. Although I do understand that if I am coding in C++ I should know it well enough to be able to code all kinds of solutions.

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

            I still think that your reasoning makes little sense.

            The fact that a lot of contestants don't know (or don't think about) something doesn't imply anything. I would agree if that was something very compiler-specific or CF-specific, like exploiting particular compiler bug that behaves clearly against the standard of C++ and has been introduced in particular version of compiler. I also didn't manage to get this problem initially, and it took me long time to figure out my mistake — but that's my fault, and not setter's.

            Rabin-Vazirani algorithm isn't known to majority of CF users either, should we criticize any setter for deciding to use it for their problem? :)

            Moreover, setters are so nice here that they even included this test in pretests. Can you imagine the mess we'd have otherwise? :)

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

              Well I do agree to that. After all, someday someone had to make such a problem which would have highlighted this issue despite the fact that this has been posted in a blog earlier (because many people don't read blogs or simply don't happen to come across them). I guess this was inevitable.

              Again, I don't mean to say this was setters' fault. All I wanted to say was that maybe the problem could have been set in a way that this issue would not have occurred (maybe setting N ≤ 104). But then this is also true for many other situations, like the need for fast IO (though I am not the setter so I don't have a say in this :P). In no way I mean to disrespect the setters, and I truly believe all setters do a great job at bringing us new problems to solve.

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

              In what sense is including this test different from including a test for the random generator of an arbitrary language? I could see which are the first 60 numbers the program would ask for and make sure they are not coprime positions. Also using any solution (assuming it does not seed on time) I can break it. I don't think this test adds to the quality of the problem and it is specifically targeted towards one of the allowed languages. Is there a test with the first 30 numbers the random of java would generate? Would you consider such a test fair?

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

                Yes, I would consider it totally fair.

                Moreover, your analogy sounds wrong to me. You don't need to know much about generator here — the solution is going to fail no matter what seed is used in generator.

                You are complaining that the solution doesn't work because constraints are too large. That's like saying "my solution with int didn't pass only because in your problem n<=1e18".

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

What is the 12th pretest on E? I kept getting wrong answer on this one

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

what is the pretest #6 in D? ..

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

Can someone please explain how to solve D?

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

Does interval DP not work for problem D?

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

    It does, my solution is df[from][to]

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

      Interesting. I kept getting WA on pretest 6. What was your idea?

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

        If the first and the last letter of the interval do not much you either will convert the longest prefix matching the first letter or the longest suffix matching the last letter. If the two letters match you will change both the longest suffix and the longest prefix on the last move.

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

          So it seems that you're doing the DP by decreasing the size of the DP interval?

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

            Yeap

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

              I did my DP with increasing size of the DP interval (I suppose that should work?). I couldn't seem to come up with a counter case though.

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

                It should at least pass the pretests I did something similar to your solution. Did you take every possible starting position?

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

                  My program should have accounted for every possible starting position. I guess the code speaks better for itself. 49731308

                  I think my transitions may be wrong but I'm not sure how.

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

                I did it with increasing interval. you can have a look at my code- here

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

          I'm probably misunderstanding you, but I don't think what you said is true. If your array is 1 2 2 3, you can change this minimally to 2 2 2 2, which doesn't match the first or last letter.

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

            Hmm no you can not. You have to change it first to 2 2 2 3 and then to 2 2 2 2

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

              Ok, I misunderstood what you meant. I thought you meant that the prefix/suffix was going to match the exact color of the endpoints.

              In any case, I see where my understanding of the problem was flawed.

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

      What are the recursive calls? I imagine it's the classic (l+1, r) and (l, r-1), but sometimes you'll have to add 1 to your result, namely if it's not possible to get (l+1, r) to be the color of c[l] or (l, r-1) to be the color of c[r], but I couldn't find a good way to find when that's possible or not.

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

Задача C нагло была взята отсюда!

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

What to do in E after finding Xn? I asked for 30 random values and tried to find d based on these, but it doesn't have to be correct

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

    i do the same and pass the pretests

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

      So I may have failed just because I forgot to delete the line where I was checking something...

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

        how u calculate d ? i find all gcd between all pairs, smth like :

        g = gcd(d, a[j] — a[i]) , for every i, j

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

          I did the same and could not pass pretest 12

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

          I had a list of all common divisors of differences. Final list could have more than 1 element, so d is last element in list, which is the greatest one. I made mistake here and said that d is first element of the list which is actually 1 :)

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

    Use your own rand instead of C++ rand.

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

      I had something like cout<<"xn is "<<xn<<endl; and didn't delete it. mt19937 should work for randomization btw

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

    In fact u are findng at least 30 rand number and get their common gcd, if it is 1, the d is true. Actually, it is correct at most situations.

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

    That seems to be the intended approach.

    Probability of failure is very small. Let's assume that you found dFake which is equal to k * d. This means that all your queries were lucky to hit position with same remainder modulo k, and the chance for it is roughly (1 / k)NumberOfQueries - 1.

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

Why fail segment tree solutions and pass BIT solutions in F? (Offline, solve for each prime separately) -_-

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

i think for about 40 minutes that's is sum in F instead of mult :(

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

I was literally begging for pretest 5 in 'C' :(

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

what is pretest 7 in C :(

I just checked how much each prime for b exists

and applied this func for each prime

long long factr(long long n,long long p) { long long po=0; for(long long i=p;i<=n;i*=p)po+=n/i; return po; } and then I got the result after division first array to the second (not sure if this is important to explain first array and the second )

what's the mistake maybe just tell me the right solution and I'll know it because I have no idea

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

E test case 12?

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

    Anti rand() testcase.

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

      I used srand(time(0))

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

        Err yes — the C standard srand() and rand() will only generate integers up to RAND_MAX = 32767. The array size is quite large, and such low-range randomization could be easily countered.

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

    My lazy way of solving this:

    long long RAND(){
        long long ret = 0;
        while(ret < n) ret = ret * RAND_MAX + rand();
        return ret % n;
    }
    
    • »
      »
      »
      5 лет назад, # ^ |
      Rev. 2   Проголосовать: нравится +3 Проголосовать: не нравится

      How about using C++ random

      #include <random>
      mt19937 gen(time(NULL));
      uniform_int_distribution<int> range(1, 1000000000);
      auto RAND = bind(range, gen);
      
»
5 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

I feel liangliang

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

Tonight I learnt one thing from C, that one should never try multiply two numbers as large as 1e18... Failed several times for it. qwq

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

Auto comment: topic has been updated by AkiLotus (previous revision, new revision, compare).

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

Anyone passed E without randomisation?

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

So is problem E just testing that we have read this blog Don't use rand(): a guide to random number generators in C++? Really?

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

    Problem E was only about knowing that rand and random shuffle might fail you.

    • »
      »
      »
      5 лет назад, # ^ |
      Rev. 2   Проголосовать: нравится -23 Проголосовать: не нравится

      Wow. So we have to be prepared for THIS type of problems now too? So it's kinda STDforces?

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

        I’ve once heard that it’s a programming competition. And yes, you must know how basic stuff works in your favourite language.

        • »
          »
          »
          »
          »
          5 лет назад, # ^ |
          Rev. 2   Проголосовать: нравится -6 Проголосовать: не нравится

          I don't mind. I'm just curious if this exploit-as-a-main-idea-stuff is going to be a trend.

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

            It's like exploiting hashes modulo 2^64: if you are doing it often enough, everybody knows it and it gets rather pointless as an "exploit".

            I would even say that my example is far from perfect: hashes modulo 2^64 have advantages (like faster execution), so you may still reasons to gamble "Do they have tests against it?.."; and here the fix is pretty much one-liner without significant side effects.

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

        Wow, mathforces, quickforces, hackforces, stdforces...

        You guys just never run out of ways to complain about contests.

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

          delayforces, isitratedforces, forcedforces, damnforces, unratedforces, grapeforces, overflowforces, cheatforces, longstatementforces, pupilforces, foolishforces...

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

      Add time(NULL) and random_device not being random to that list.

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

What is correct structure for F? My first thoutgh is segment tree for each prime with add on segment and sum on segment. But then I realize that segment tree can't do that from my understanding.

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

    That is entirely possible with lazy segment tree, but it uses too much memory.

    I had a segment tree storing the product of values in an interval, and a segment tree for every prime telling if the prime exists on the interval. The second type of segment trees just use vector<bool>, so they don't use too much memory.

    Answer to every query is just product of numbers in the interval * (p-1 / p) for every prime p that has at least one appearance on the interval. The division is of course modular division.

    In total this is O(q * log(n) * (log(n) + cp)), where cp is the amount of primes below 300

    This was quite annoying to fit in time limit however, since I don't know how to write a lazy interval multiplication segtree without taking modpow log(n) times. TLE'd once but some changes passed pretests, taking around 3s

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

      You can make things easier by noticing that there are 62 primes below 300, so you can store a single long long with a bitmask of primes available, and then have a single segment tree for all primes and do all updates/queries with bitwise operations.

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

      Thanks.

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

    One segment tree for product with range multiplication and the second one with bitsets for primes in range.

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

    Segment tree got TLE with this idea. But BIT passed pretests. :(

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

Now everybody knows who is the author of problem A. Of course, it's GreenGrape ;)

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

    Yeah,I thought of the idea too, But I have not done that problem....sadT_T

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

what is wrong with my solution on C? 49728844

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

Я, конечно, понимаю, что далеко не всем известен Тимус, но, как вы объясните, что С лежит на Тимусе уже много лет? https://acmp.ru/index.asp?main=task&id_task=200

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

20 minutes per problem? I want to think in deeper way, not just to be the fast-solving machine :( Why codeforces is pushing participants(in terms of time) so hard?

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

C was gay af

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

what would be the ans in test case in problem C: 5 100?

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

I_hate_greengrape

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

Wow what the fuck is wrong with those people bashing the authors for including anti rand() tests in pretest? If they weren't kind enough to make those pretests for you then surely someone would hack you in like 5 minutes. Do you guys seriously expect the authors to publicly announce Hurr durr just saying rand() is weak you should not use that but this problem is definitely not about random?

Maybe next time try to actually appreciate the knowledge you gained in contests.

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

First time I actually enjoyed a GreenGrape contest.

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

dissapointed with the contest overall but the setters are some weebs so what to expect

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

I think intersection enjoyed this contest!

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

turns out rand() has max value 32768 on CF... rip master

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

For those of you who are looking for a good and clear randomization implementation 49733774 Correct me if I'm wrong.

Thank you AkiLotus GreenGrape cdkrot neal

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

WA#108 E... How to know did it fall due chance 1.86185·10 - 9?)

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

    I failed that too. It should be some hacks regrading std::random_device. I saw lots of submission failing 108 are using std::random_device.

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

NO!!!! WHY????

www.bmp

wow.bmp

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

What is wrong with this code.

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

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

Auto comment: topic has been updated by AkiLotus (previous revision, new revision, compare).

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

Why does using long double instead of long long worked for passing test case 10 in Q.C ?

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

    Even long long can have overflow issues dealing with big primes, something like 1e10 or so. 1e10 * 1e10 makes number even bigger than long long limit.

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

why my Test Case 17 is failing: Problem B @Akikaze

Test: #17, time: 0 ms., memory: 140 KB, exit code: 0, checker exit code: 1, verdict: WRONG_ANSWER Input

69 9 5

-7 10 7 3 8 -9 9 -6 -5 -1 6 7 -3 10 2 3 -10 3 1 -7 -9 -10 7 2 -10 -7 -5 -5 -8 -7 4 3 10 -7 -8 7 4 6 -5 -6 8 -7 6 -5 -1 -4 0 -3 1 -2 -8 -3 -4 9 8 5 5 -5 -4 10 6 -6 -2 4 -6 -6 -3 -3 0

Output

136

12 27 41 52

Answer

136

13 32 47 57

Checker Log

wrong answer the sum of beauty in contestant's partition does not match with contestant's answer: expected sum = 136, found 130

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

    you are using the least in "bigger" numbers for several times. i got wrong on this test ,too. you should use a flag not to use it more.

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

Hello codeforces, I want some advice about my sysfailed code in problem E.

https://codeforces.com/contest/1114/submission/49736873 https://codeforces.com/contest/1114/submission/49736886

the only diffrenece between two codes is random function. the one with (rand()<<15)|rand() fails at test 101, but (rand()<<16)|rand() successfully passes all cases. I thought that if cpp rand() generates [0,32767] uniformly, then (rand()<<15)|rand() can generate [0,2^30] uniformly, but the result says it isn't.

Could anybody solve my curiosity? Thanks in advance.

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

    rand()<<15|rand() does generate [0,2^30] uniformly.

    I think that test 101 is an anti-test for rand(time(0)), or in other words all values of time(0) that start from somewhere around the end of the contest until a few hours after that, which is around 10800 values for 3 hours, so any code that uses srand(time(0)) and was judged during that time will fail, resubmitting should get AC.

    rand()<<16|rand() most likely works because test 101 was based on rand()<<15|rand(), and no similar test was based on rand()<<16|rand().

    All of what I said is might not be true, but I couldn't think of any other explanation.

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

Apparently, my this submission got WA on test 101 in contest time and now the same solution is getting AC.

WA Submission

AC Submission (added an extra space before the last line because they weren't allowing me to submit the same code twice).

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

    AC submission doesn't have the line x ^= 16153382;. rand() is a bad random number generator in general, and using it multiple times actually makes it worse. Also, rand() on CF gives atmost 215 - 1 anyway, so the lines x &= (1 << 15) - 1 and y &= (1 << 15) - 1 don't have any meaning.

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

      May be it's not the most ideal random number generator. But that's not the point. The point is I should get consistent verdicts if I submit the same code repeatedly. And it appears that basically using srand(time(0)); is what caused me that WA, which is frustrating because many other contestants also used it and got AC.

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

What will be the output of this test case for D:
5
6 7 6 8 6

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

    It's 3. My previous wrong solution was printing 2 for this test, because it wasn't take in consedirstion that the chosen start is unchangable, so it proceed your example like following:

    7 -> 6

    8 -> 6

    But the correct process is:

    If we choose the index 2 (with number 7) as a start, then we will change it to 6, so the array will be: 6 6 6 8 6, then we connot change the index 2, so the array should become: 8 8 8 8 6, then: 6 6 6 6 6, so the answer is 3.

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

Wow, cool song

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

alright, this is enough. i have so many times expressed my concern about programming problems being wrongfully, but intentionally mixed with math. problem C was a nightmare because it had useless math. why do you keep making these? mid problem set you think “i can’t make this hard in a challenging way so i’m just going to bombard it with some random useless stuff”? this is not okay.
also, seeing from the editorial you really didn’t care about the whole contest and/or about us either.. it was a joke. i had high hopes but they all fell short.

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

Trying to make some rand(time(0)) code fail? Well, I'm not the great fan of that idea, but it can be an option if problemsetter can block every possible code that he can think of. The problem is that it's definitely impossible. If I use "rand() << 16 | rand()" instead of "rand() << 15 | rand()" by mistake, it will still work. If I use "for(int i = 1; i <= 5; i++) val = (val * RAND_MAX + rand()) % (1<<30)", which is my common random number generating code, it will still work too. If you can only make that exact random generating method, then what's the whole point of making those anti-rand tests? At this point, it's totally unfair to make some of the codes fail only by the reason that he used the same random number generator with the problemsetter.

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

    Well, my initial idea was blocking srand() and its derivatives only. I have thought of time(0) stuff, but then I didn't go on with making such failed, because:

    1. There'd be too many seeds to kill all of them.
    2. Using current time from epoch has been a common method in choosing seeds for RNGs, thus causing such approach failed (for not being precise enough to be unpredictable) would be too unfair, even to me.

    However, hacks are here and there. This kind of behaviours was unavoidable, and we still had to include such hacks into systest (tests with indices  ≥ 97 were hacks), thus making things more unfair than what I wanted at first.

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

I keep getting Runtime Error on B :( What could be the problem? I checked the memory capacity, return value, and declared them in the global variables but nothing seems to work!

#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;

vector<pair<int, int> > vec;
bool pick[2000001] = {0};
vector<int> vec2;

bool myfunc(pair<int, int> a, pair<int, int> b) {
	return (a.first >= b.first);
}

int main() {
	int n, m, k; scanf("%d %d %d", &n, &m, &k);
	for (int i = 1; i <= n; i++) {
		int a; scanf("%d", &a);
		vec.push_back({a, i});
	}
	sort(vec.begin(), vec.end(), myfunc);
	long long int ans = 0;
	for (int i = 1; i <= m * k; i++) {
		pick[vec[i-1].second] = true;
		ans += vec[i-1].first;
	}
	int bucket = 0;
	for (int i = 1; i <= n - 1; i++) {
		if (pick[i]) {
			bucket++;
		}
		if (bucket == m) {
			bucket = 0;
			vec2.push_back(i);
		}
	}
	printf("%lld\n", ans);
	for (int i = 1; i <= (int) vec2.size(); i++) {
		printf("%d ", vec2[i-1]);
	}
	return 0;
}
  • »
    »
    5 лет назад, # ^ |
    Rev. 3   Проголосовать: нравится 0 Проголосовать: не нравится

    I think you made some mistake when you print the answer, have a try on this data :

    6 1 4
    4 3 2 2 1 1
    

    your code has output 4 numbers in the second line, while the correct case should be 3. By the way, I suggest you use > instead of >= in myfunc() , it seems that c++ requires strictly lower or bigger.

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

      Thanks! Got an AC! Hope I don't make mistakes on indexing next time...haha^^;

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

First time become blue in this round, feeling good ^_^ .

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

Wonder how to prevent hack of E by random generator

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

In problem C, I m getting WA in test case 7 . But I m getting right answer in my compiler. but CF compiler is showing another output and giving me WA in test case 7 . I m using gnu g++ 14 . Can anybody have a look at my code ? https://codeforces.com/contest/1114/submission/49753432.

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

For Problem C where can i read the necessary properties of factorial to understand the logic behind the given editorial?? I cant understand how the problem was simplified to just that. AkiLotus

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

    Consider the b-ary representation of n!. Let it be represented by the digits d1,d2,d3,d4,d5,d6 (I'm considering it consists of 6 digits. It's similar for any no. of digits). Suppose last 3 digits are zero. Then it's decimal representation will be num=d1*b^5+d2*b^4+d3*b^3. The rest terms are not considered because they are zero. Clearly num is divisible by b^3. Here 3 is the maximum power of b that divides n! which is also the no. of trailing zeros. Hence proving the solution. Satisfy yourself with some more examples.

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

In problem C the system says that my code is similar xith xb2403/49705111, ciwomuli/49716822, XY_cpp/49725082;That is because C is similar with the problem P3927 and I use the solution which is last modified at 2017-10-15 14:46

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

can someone tell me why my solution is wrong?

code

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

    Try to get gcd from a[x] - a[y] for all your selected x and y, not only x and max.

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

      Hey,

      Thanks for replying

      it is still broken...

      Code

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

        I think that there is a countertest on pure random_shuffle. (Might be hack?) And sorry, using Euclidean algorithm my first suggestion is useless. (gcd(a, b) = gcd(a, b + a))

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

    You using random_shuffle for shuffling. Since it using rand() it shuffling only first RAND_MAX items which is small. Use std: : shuffle(begin, end, mt19937) instead.

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

Problem C is an interesting maths problem. The idea is to look carefully at the b-ary representation of the number n!. It is a modification of Legendre's formula. We need to find the largest power x of b such that b^x divides n!.

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

Wow 2019_BecameMaster! You seriously lived up to your name.

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

In problem B i am getting correct output on test case 5 on my machine but on codeforces i am getting wrong output please help. My code