I really got fed up with codeforces pretest and main test system. This system makes every contest a game of luck. Let's say there are two contestants: A and B. They both solve a problem incorrectly. Contestant A submits his code and gets pretests passed, while contestant B gets WA on pretest. Now B moves on and will get 0 points for this problem, while A can easily spot the mistake in the code and correct it. He gets 50 points penalty, and he gets the score for the problem. So what was the difference between A and B? A was lucky because he got WA on pretest and got the score for the problem, B was unlucky to pass the pretests and he got nothing. Of course it is said to check your solution, and it is your responsibility if you get WA on main test, but still it costs lots of time (too much time for 2 hours contests) to check every single solution and even if you spot a mistake, you still get the 50 points penalty for resubmitting your code and the time penalty. This pretest and main test system is ridiculous and shouldn't be continued in such a way. I could think 2 ways to make the system testing fair and removing the factor of luck:
1: Your solution gets tested when you submit your code. If it pass tests it is ACCEPTED and there won't be more tests at the end of the contests. If it doesn't pass tests, you get penalty as usual. This would make slightly easier to solve problems, but this advantage would be good for everyone, so it wouldn't affect the contests results.
2: There are no pretests at all. You can submit your code and you don't get any feedback from your verdict of your solution. You can change your solution till the end of the contest. There are no penalty for resubmitting, but only your last solution will run on tests (after the end of the contest) and you get time penalty also according to the time you submitted your last solution. This system would make much harder to make a good solution, but this would be fair for everyone.
These are my suggestions. If you have any other idea feel free to share.