random.cpp's blog

By random.cpp, history, 11 months ago, In English

Disclaimer : this blog is not attacking any problemsetters directly, its about general trend. And my English is horrible so...

So lets first analyze contests that a hosted nowadays.

  1. Codeforces : 2 hour contests with cf like problems
  2. Atcoder : 100 mins contests with cf like problems
  3. Codechef : 2 hour contests with cf like problems

You get the idea. Everyone is trying to copy cf. So what`s bad with that? CF like problems become more guess the idea, test it on samples, roll your face on a keyboard, and pray it pasts pretests. Its exaturation but still, I asked my expert friends when was the last time they used pen/paper on D2A, D2B or D2C. I got a lot of answers of : "Sometimes on C, but in general I dont use pen and paper on first tasks.". Same thing with proving your solution works. I never do that on ABC, and same with people whom I asked. So the thing is, a lot of people solve ABC only at div2, and their placement will depend heavily on how fast they can solve. And if you are trying to solve ABC using normal methods of pen/paper, you will get overtaken by a lot of guessers. And some guessers who were unlucky to get some WA, will be below you. IF you want more proof of that, look at peoples rating graphs, do they look normal to you, or they look like heartbeat chart? And even worse with performance graphs, when it almost looks random, with points generated randomly from 1000 to 2000.

And there are 5 hours contests that become more like 3 atcoders in a row. Subtasks. Do you see any difference between them and cf problems? You have to get all tests right and only then you can get points. Same as cf. So in this systems solutions that work fast enough only in 10% of cases when idk, n < 10 and a[i] < 100 can get the same emount of points as solutions that works in average in n log n, but n ** 2 in worst case scenario. Is this fair? I dont think so.

Also thats why people are stuck. You cant guess solutions to all the tasks, and to me guessing part ends after ABC.

  • Vote: I like it
  • -30
  • Vote: I do not like it

»
11 months ago, # |
  Vote: I like it 0 Vote: I do not like it

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

»
11 months ago, # |
Rev. 3   Vote: I like it +19 Vote: I do not like it
Atcoder : 100 mins contests with cf like problems

What Atcoder version are you using?

»
11 months ago, # |
  Vote: I like it 0 Vote: I do not like it

I have to agree to disagree

Atcoder : 100 mins contests with cf like problems

First of, I think that this specific quote couldn't be more far from the truth.

CF like problems become more guess the idea, test it on samples, roll your face on a keyboard, and pray it pasts pretests

Any problem solving process starts with making observations and taking guesses, good observations and good guesses can lead to a solution faster than more unfortunate ones. The more problems you encounter, the more techniques you know — your guesses will become better and so will your problem-solving skills. Also CF isn't a math olympiad (surely it isn't, right?) so you actually don't have to come up with strict 10-page long proofs.

Competitive programing is getting worse

How much worse? Is the difference between past and the present substantial? Like, two times or ten times worse?

  • »
    »
    11 months ago, # ^ |
      Vote: I like it +4 Vote: I do not like it

    he is mad about previous contest cuz his rating fell

    • »
      »
      »
      11 months ago, # ^ |
        Vote: I like it 0 Vote: I do not like it

      I left after 10 minutes, and I expected -150, so I am not mad.

  • »
    »
    11 months ago, # ^ |
    Rev. 2   Vote: I like it 0 Vote: I do not like it

    So ok, atcoder is different from cf to you(I find them very simular, but ok)

    So you dont agree that cf problems are about guessing the idea, and in the next paragraph you say that solving all problems starts with guesses and observation. So my point is, that in cf after guessing 1 fact you have a 20 lines of code of solution. In my view of cp, cp should be about finding X fact, building up solution from that, and than using combination of algos to implement the idea. So its more like 50% finding(not guessing) the idea, and 50% is about implementation of the idea. In my experience of cf, its more like 80% guess the idea, and than implement it as fast as you can.

    So its a bit of clickbait title to get people to see it and share their opinion at point I am trying to make. Obviously I cant say that cp is twice more bad than a month ago, but I see a lot of heartbeat rating graphs, and a lot of stuck people(I am included). So while searching for the reason why I am stuck at 1600+-, I thought its because I guess solutions instead of solving problems.

    Also about proving that your solution is actually working. Yes its not math, and you can solve problems without proof, but each time you submit a code, you just pray it works? Or if confident it will pass, where the confidence comes, if you have no proof of the solution even in your head.

    • »
      »
      »
      11 months ago, # ^ |
        Vote: I like it 0 Vote: I do not like it

      Maybe you've read my comment the wrong way, or I haven't structured it well enough, either way what I meant is:

      • AtCoder is different from CF
      • Guessing is a big part of solving problems on CF as mush as solving any other kind of a problem or a puzzle

      You mention that in your view of competitive programming the solution starts with an idea:

      In my view of cp, cp should be about finding X fact, building up solution from that, and than using combination of algos to implement the idea.

      Then my questions to you are: Where do you get your ideas from? Do you stop on the first idea that you come up with? Or perhaps the one that looks the most plausible to you? Can you describe the process of coming up with new ideas? For me the coming up with the idea of the solution is the same as guessing: you read the problem statement carefully, you try to figure out what is actually needed to do and then you try to come up with as much useful ideas as possible in the shortest amount of time (almost like a solo-brainstorming, I don't particularly like this term because it sounds like a buzzword, but still). I am not stating anything new, George Polya has wrote a great book titled "How to solve it" focused on, well, solving problems, he describes the process of problem-solving very well.

      Now onto the implementation part:

      So its more like 50% finding(not guessing) the idea, and 50% is about implementation of the idea.

      Do you really want most of the tasks to be grueling implementation tasks with an algorithm stacked on top of another algorithm on top of some DS? Are you sure those problems won't become even more guessable ("Oh, I think I can apply X, then Y and Z, looks like I've solved the problem now")? Or maybe you favor constructive and ad-hoc problems? Because I think those can be guessable as much as any other problem (If not more).

      Proving solutions of problems:

      Yes its not math, and you can solve problems without proof, but each time you submit a code, you just pray it works? Or if confident it will pass, where the confidence comes, if you have no proof of the solution even in your head.

      What percentage of problems should require formal proof? Is informal proof enough? For example, do div2A and div2B really need proofs to solve them? In case of the easier problems usually I just look for possible edge cases, If I can convince myself that I haven't missed any — that can give me enough confidence to think that my solution is correct. For harder problems usually I have to take the old and trusted pen and paper approach — look for patterns, edge cases, everything. It also depends on how much time there is left: I couldn't care less for a proof if there is less than 10 minutes of the contest left. One solution could be to not include the most of tricky test cases in pretests, but then there would be an outcry from a lot of participants.

      On being stuck: can't say much, but I don't think that guessing problems is a downside, as long as you can come up with a correct solution after multiple incorrect guesses and carry it through — you should be fine.

»
11 months ago, # |
  Vote: I like it 0 Vote: I do not like it

Wait but your rating graph also looks a bit like the "heartbeat graphs" you describe.

  • »
    »
    11 months ago, # ^ |
      Vote: I like it 0 Vote: I do not like it

    Because I also guess ideas to ABC, as I said in the in last sentance: " and to me guessing part ends after ABC"

»
11 months ago, # |
  Vote: I like it 0 Vote: I do not like it
IF you want more proof of that, look at peoples rating graphs, do they look normal to you, or they look like heartbeat chart? And even worse with performance graphs, when it almost looks random, with points generated randomly from 1000 to 2000.

I could somewhat agree with this part, because, even if 2 people with the same rating have solved the same amount of problems there could be a huge gap in the rating change just because of the penalty, but how else can you break ties in case of people with the same amount of solved problems. I think this is just the result of CP getting popular (casual 26-30k registered participants in div2 rounds)

If someone wants to reach expert — they need to consistently solve at least ABC in a reasonable amount of time, in the case of CM I think it's more like consistently solving at least 4 problems, or solving ABC really fast (it depends on how balanced each round is ofc)

Also my graph looks more like it belongs to a person that died at the ER, so what do I know.

»
11 months ago, # |
  Vote: I like it 0 Vote: I do not like it

You know coming up with interesting, original, non-guessable easy problems is difficult, don't you? If you don't like the current problem style, you should try to come up with better problems.

  • »
    »
    11 months ago, # ^ |
      Vote: I like it 0 Vote: I do not like it

    I dont say that problems are not interesting. I am trying to say that such problems propose the way of solving them by guessing. So for example in some contest you can get 1800 performance because you solved C on xor by assuming X fact is true. But the next contest you get C on or, and you didnt find Y fact, and you get 1000 performance. Sometimes solution to E is shorter than to A, because main point of problems is to find X fact, not about some interesting algo that solves said problem. And with such problems guessing becomes the main strategy for a lot of people, which is not good in my opinion.

    • »
      »
      »
      11 months ago, # ^ |
      Rev. 3   Vote: I like it +1 Vote: I do not like it

      I understand completely what you are trying to say. And I mostly agree with you saying that guessable problems are bad. But it feels as if you didn't understand the point I was trying to make.

      Creating good problems is difficult and it takes a lot of time, even for experienced problemsetters. They want their problems to be interesting and original, which is not easy. Problemsetters aren't deliberately coming up with guessable problems, but there are some reasons why many problems end up being guessable. On one hand, it's just more difficult to come up with non-guessable problems that are also interesting and original. On the other hand, problemsetters are almost always high-rated people who might find proving solutions trivial and thus, they don't realize that their problems are very guessable (this is also a reason why having testers from different ratings is a good idea).

      Let's for a moment suppose that Codeforces coordinators decided to not allow any guessable problems for contests. How would things change? Now it would be harder to come up with suitable problems for contests -> creating problems for contests would take more time and effort -> we would have less contests. The problems would probably be a little nicer on average, but is this what you really want?

      What I'm basically trying to say, is that if you cannot come up with better problems than what contests currently offer, you should stop complaining and leaving comments about problems being bad with no real improvement ideas. Constructive criticism is always appreciated, but notice the word constructive — criticism isn't constructive unless you explain what is bad, and how it could be improved.

      P.S. (Disclaimer: you shouldn't trust me on this since I didn't participate like 7 years ago). You said that "Everyone is trying to copy cf", which I think is blatantly false. I don't know much about Codechef so I'll not comment on that, but AtCoder is definitely not copying Codeforces. As far as I know, the problem style of AtCoder hasn't changed much over the years, but Codeforces problems have swiched from mostly implementation to mostly thinking, i.e. closer to the AtCoder style of problems.

      • »
        »
        »
        »
        11 months ago, # ^ |
          Vote: I like it +15 Vote: I do not like it

        Now that I think about it, my criticism is not constructive, I will try to change that.

        I didnt find a great way of solving the problem of guessable tasks, other than create problems that require more algos. Those problems may not be as interesting, but in a long run create less frustrations, and more predictable standings. In my opinion this problem cant be solved without sacrificing something, in this case interesting tasks. But if we really care about knowledge part of cp, in my opinion this sacrifice pays of.

        About atcoder and other sites, I am not trying to say they just take cf problems, change them a bit and then say that its theirs problems. They have their own style of problems, but I am trying to say that all problems on all big websites become more guessable, short in code, and dont require a lot of algos to solve, or algo modifications.