Hello, Codeforces!
I'd like to invite you to Codeforces Round #436 (Div. 2). It'll be held on Monday, September 25 on 10:35 UTC and as usual Div. 1 participants can join out of competition. Note that round starts in the unusual time!
This round is held on the tasks of the school stage All-Russian Olympiad of Informatics 2017/2018 year in city Saratov. They were prepared by Perforator, MikeMirzayanov and fcspartakm. Many thanks to the testers: sdya и BledDest, and coordinators KAN and vintage_Vlad_Makeev.
It will be a little unusual round — you will be given six problems and two hours to solve them.
Good luck and have fun!
Congratulations to winners!
Div. 2:
Div. 1:
Analysis is here.
why it starts on that time ?? can't it just be as usual ??
At this time the Olympics in Saratov.
I only hope this round is friendly
I hope so. But surely I'll get every problem TLE or RE then.
and WA WA WA (+﹏+)
Oh My God,, I completely missed the round not even a minute
People from Far East are not able to participate in "usual" time for you. So this is this the one of few rounds in comfortable time for them. Please be patient :) P.S. But unusual time is in case of original olympiad time, to prevent cheating.
Similar contest of last year : http://mirror.codeforces.com/contest/723
unusual bad start time,just why???
It's also good start time for Chinese, Korean, Japanese, people live in Kamchatka, etc.
Nice point,bad timeing is also great
You're right!
It's very good!
sorry, i live in moscow, but it is easy for me to participate
there're still some people in asia
**It will be a little unusual round** — you will be given six problems and two hours to solve them
what does it mean?It means that you will be given six problems and two hours to solve them.
It will be a little unusual round
I have problem with this part.In usual round you have five problems, not six.
oh,thank you
Swistakk be like, but yeah whatever I got +1 contribution so thanks for asking XD
Wooow 3 contest in 3 days
Tough choice. Wake up at 3:30am or go to bed at 5:35am?
very nice time for china
another choice is no sleeping
Can't you do both?
we always stay up late to attend the test in summer,China.....
the best time for chinese
yes!:)
dalao哪里人?
please speak english
why we must speak english?i mean between two chinese
ok,i'm chinese,too.but most of the users are not chinese and they cannot understand you
i mean some others who look the communication between you two
fine,actually,we're both mogicians,my qq:2632812444
Hey I don't think you should mh in cf(you know what I mean.) As this guy seems don't know what you are talking about.
what,you are a magician .what do you mean
Hope I can become candidate master after this round.
You won't. You will do badly and have 1833 rating right after.
Really? So when I can finally become candidate master?
scoring ..??
Scoring is usually announced later.
Russia's time is one o'clock in the afternoon, but for China is six o'clock in the afternoon. This is a good time for us, but it may be for some other people who need to stay up late at night or get up early in the morning.
What does that mean?
Well, in Most area in China, it's UTC+8. So it means if we want to join a contest which is held at six o' clock in evening in Moscow, it will be eleven'o clock in Beijing. In this case, most contests were hold in the midnight. To join it, we have to spend our sleeping time.
.
Go and learn DP. It is very useful.
i hope clear and short statement.
Why so early. I'll be in school at this time(4
Don't go to school (if you don't have any important exam).
I am a newbie and I wonder how to compare my rank profile to others in a picture? I need someone tell me plz. No down vote plz.
Try this
Got it.
This round is very kind for China :)
For Bangladesh too. It's going to be 4:30 at afternoon.
Ah! Really? I prefer the usual time. Why don't you?
Applese is so smart that he will solve all problems in this contest!
I don't think so. Jxcakak can all kill every problem. He is a good contestant.
Flatter each other
%%%yyq
I'm having a BED time participating this round...
is it rated?
Scoring?
hope to be green :(
3chenruiyangcsh, are you really a human???
I'm sure there is not a human, there are a lot of humans :)
And some dragons
He was banned about an hour before the finish of contest
a lot of people ,he should be banned
Ha-ha
FAQ: Why at this time?
Answer: The same problems were used at the school stage All-Russian Olympiad of Informatics, so it's important that it's participants shouldn't participate in this round, because they had the same problems 4.5 hours earlier.
nice pretests :)
Hack page is not loading properly.
RIP E. :(
I have a question on Problem A, why answer of this is not yes?
4 2 1 1 3 First one will choose 2 & second one will choose 1, then first one will choose 3. So both of them will have same numbers of card.
each player chooses only one number
one can choose only one card
read problem statement carefully. Each player can take only one number.
Kept getting Wrong Answer on pretest 3, Problem E. Any hints?
I think it's just some small random test. I got wa on test 3 because I didn't maintain parent array correctly.
well pretests are weak i guess i sorted the values by d before dp and another one in my room sorted by t both pretest passed
ok so maybe i was wrong . both of us got AC but i dont know how
This test help me:
The question's language is so bad :( I explicitly sorted :( WA
I took dp[i][j] to be the min time required to get value of j from first i items. If I dont sort according to deadline I get wrong ans, but if I do I get right answer. I dont know how sorting is helping. Can u pls tell?
Firstly, I mentioned sorting for the final part, when we have to print the answer.
Coming to your question, sorting with deadline is necessary because if you don't, you might miss out some optimal combinations.
Try running your code on mentioned test and realise:
2
2 5 3
2 3 5
ans:
8
2
2 1
Missed a stupid edge case in problem C,ACed in the last 7 minutes ;/ Also guys,how to solve problem D ? I thought about it for a full hour,came up with 3 non working greedy solutions,
D seemed ad hoc, I got AC in pretests. The number of changes is just n-number of unique integers in the input. And change the first duplicate to 1 and then the second duplicate to the next smallest possible element that's not in the array till now and fill like this. I hope it doesn't fail O.O
wont your approach fail at test case number one, because the first duplicate is "3" at i = 1,so you will replace that 3 with "1" as "1" is not in the initial array, Next at i = 2, we get a[i] = 2 which is also a duplicate,so we will replace that with 4, yours should give answer 1 4 2 3 in this case.. I think I dont clearly understand your approach,please elaborate,thanks!!
I passed the system tests yay! So yeah, I told a bit wrong. What I did was....
Let the element to be replaced(in pace of a[i]) be cnt; if current element(2 in this case) is less than cnt, then I check if I have left any 2 before, if I have then I will change current 2 to cnt or else I will leave it and go to the next index and mark 2 as done. Code here: http://mirror.codeforces.com/contest/864/submission/30711359
Pretest 6 problem C?
Guys, I am new here at Codeforces, can anyone plz tell where i'll find the editorials to the contest problems ?
Editorials will be avialable soon , link will be given in thi post after update. Also you can view editorial directly from problem page once they are released. Usually editorials are avialable with few hours .
thanks
Problem C
01:40:22 Pretests passed [pretests] → 30719776
01:53:58 Problem locked
01:55:26 Hacked by lyllyl
:( :( :(
CF — Predictor are it`s working with any one ??
i want to know my expected rate :( :(
WTF
Why do I like this contest so much?)
Hack for C: 10 8 6 2 Answer : 2
How to solve the problem E?
Sort items by deadline:
dp[j][t] — maximum value you can get, when you select from first j items, when you are at time t.
How would you go about recovering the indices of the chosen items?
Remember what are you doing in the state (if it is invalid — i.e. t >= d[i], move to dp(i,d[i]-1)). Then you can either take item i or do not take it and move to dp(i-1,t). When you recover the soultion, just follow the same decisions.
I noticed that this guy: ILIAz is accessing uninitialized variable in case the ans = 0: http://mirror.codeforces.com/contest/864/submission/30720468
Unfortunately my hack with 1 item did not work...
How do we do F?can anyone tell me please?
@admin I submitted E about a minute before the end of the contest. I straightaway got WA on pretest 1 which works fine on my system. Moreover, my submission can not be seen on the standings page. Please fix this. KAN
Submissions not passing the first test are not shown on the standings and are not counted in penalty.
When you were about to solve E first time in your life but then you get WA because you wrote x instead of a[x][3]
...
For problem D,I'd like to know how my method is wrong...Thank you in advance.
Firstly count the unnecessary number in the sequence,(for example 2 2 then one of the 2 is not necessary ,it must be replaced by other number) and then set i =1 loop in range[1,n],when find a number which has appeared 2 or more times in the sequence then try to replace it,but if even the smallest number which haven't come up in the sequence is larger than this unnecessary number then we don't replace it;otherwise,replace the unnecessary number with the smallest number which haven't came up yet.
And for those number still not appear in the sequence(let them be a set),set i=n down to 1 loop,then perform the replace operation from the bigger to lower in the set then output the sequence
And I got WA on test 8,until the ending of the contest I didn't pass pretests and just lose the scores of the unsuccessful submissions and got a terrible standing ...As I'm not perform well in several current contests I don't want this bad condition continue I'm so sad...
I tried the same approach as you and I cannot come with a test that makes my solution fail. Let's wait until tests are visible... :(
upd: wrong answer 3183rd numbers differ — expected: '3390', found: '125991'
I think it is better to continue thinking about it XD
upd2: try this one
Note that the missing numbers are 3 and 5. On the forward iteration we will replace the first 4 with our 3, and on the backwards one we will replace the second 2 with our 5. This will leave the array
1 2 5 3 4
. However, note that we can get the array1 2 3 4 5
by changing two numbers, too.Ouch...I got it now...Thank you(you are so clever...I didn't find such test cases before reading your comment by myself...
Me After seeing superfast system tests
looks like you haven't been participating in cf rounds since more than a month bcoz these days its fast.
Did he said that it had been slow?
there is a difference between pretest and systest :)
Solved 3. Good for me or else i would have gone to depression.
How to solve F?
Consider the arrays of short ints reach[3001][3001] and nex[3001][3001][13]. Define
For a query (s, t, k) first check nex[s][t][12] and nex[s][t][0] to see if there is an infinite cycle, or a path does not exist. If none of these are equal to infinity, we can just compute the k-th node on the path in a similar manner to LCA.
Of course, it is easier to just compute the answers in an offline fashion.
I just read your code. I was amazed to see you use "short" while I received MLE using "int" in the contest.:( However,it seems that the time limit is so loose that I passed the problem by only storing nex[3001][3001][6] and brutishly use nex[x][y][5] when k is too large. Maybe it looks like a sqrt deviding.:)30738221
A solution which probably uses a bit less memory than Benq's.
After reading the input, sort adjacency lists by the endpoint node: this way doing a DFS traversal will result in ideal paths.
Group all queries by the
starting node
. We'll answer each group separately with a separate DFS that starts from thestarting node
.Doing the traversal maintain some additional data structures:
stack
of the nodes on the current path (append the current node to it at the beginning of the recursive function and remove at the end).stack
(in current path). We can reuse the same array that we use to mark whether the node has been visited.set
of nodes that form a loop: whenever we find an edge to a node that is currently on thestack
, we add it to thisset
; before we end analyzing the node we remove it from thisset
(at the same time as we remove it from thestack
).Whenever we reach a node which is an end point in any of the queries with our
starting node
and we did not compute the answers for them yet:set
is not empty, set the answer to -1 (we know that there is a loop that we can use to continue making the path to this node lexicographically smaller indefinitely);k
th element of the stack as an answer for each of the corresponding queries.Is this round rated?
Sorry, I've just made a mistake.
Could someone explain me the test case for F?
Here
query(1, 4, 2) == 2
. However, there is no ideal path from 1 to 4 (1-2-3-4 > 1-2-3-1-2-3-4 > ...
).Where am I wrong?
There is no edge 3-1.
Okay, that was dumb. Thanks!
XD
Cant load the pages . Is sys test over?
yes......wait for the ratings updation.
Normally how much time is needed to update ratings?
1 hours 40 min on an average.
How to solve problem C?
Greedy + Simulation. Suppose you are at 0, if you can go to 0--->a---->f without refueling go, otherwise go to f first refuel and carry on. Vice versa for a to 0. Carefully implement it.
It is giving wrong output on testcase 7. Can you help what corner case I am missing?
You can see the test case on which your code is giving wrong answer. BTW, your condition for -1 is wrong. It should be if b < max(f,a-f) return -1.
One way to solve problem C is using Dynamic Programming approach.
Think on this function F( i, j ) = maximum amount of gas that I can have if I have had i journeys using j times gas station before.
See my code for more details: 30708352
Why is the cf predictor not showing today's round ?
Rating update is taking so long. It seems it is compensating for fast system testing.
It was updated just now :)
Congrats :)
congrats:-)
No mention of winners :( . Don't know I will ever come under 5 or not again :(
Congrats, post was updated :)
Thanks
Lately, I'm constant af...
Thank you god for helping me not make systest failing bugs today. :)
It seems that there is only one people (me) confused by the definition of "lexicographical order" in Problem C.
Sorry...I mean Problem D...(will I get lots of downvotes? scared:(
I got hacked at a problem today. Can someone explain how hacking a problem works and how can I hack someone? Also, when will the editorial be posted?
Finally, I became candidate master!!!
I'm blocked on something silly and am unable to figure out whats wrong. Would be great if any of you could help! For problem E, In this submission, I have clearly sorted my vector before printing it. Yet, it somehow prints a non-sorted sequence. (Check verdict for test case 3)
Test case 3) Participant's output 1 2 4 5 6 7 8 9 looks sorted to me
deathsurgeon
"In the third line print m distinct integers — numbers of the saved items in the order Polycarp saves them."
The answer isn't necessarily sorted x)
Firstly, I misinterpreted the question. Secondly, I also got confused between "output" and "answer" in submission. Ahh, I'm getting old at this :/ Anyways, thanks NMouad21!
Anyone got the idea of problem F test 13 query 24?
I saw many people failing on it... (including me...)
I was wondering if the algorithm was incorrect...
That could be because of incorrect algorithm. At least mine fails thereat.
Test your solution with
It should output
3
Oops, my solution passed this test...
I found a data that can cause me WA now
Thanks for your help!
in problem 864E — Fire
I can't understand why it's right to sort the input by d and then calculate the answer with dp ,, t is also affecting the answer as t can be large and d small so i should take this value after other values with large d ?
Consider any two items. If in the optimal answer, I am only going to take one of them, then their relative ordering doesn't matter.
But if both of them are in my optimal answer, then which one would you take first? It makes sense to take the one which is ending first (i.e. has a smaller d value) than the one which is ending later (i.e. has a higher d value).
Since if you first took the one which is ending later, and then took the one which is ending earlier, then you can also do the inverse, i.e. take the one which is ending earlier and then take the one which is ending later.
Its about the order of choosing of course its better to choose the items with less d first so they wont be expired
Imagine that
d[i] + 1
is a moment when explosion hitsi-th
item. And DP approach here is just a process of caching recursive brute-force which would traverse items in increasing order ofd[i]
because it optimizes order preservingO(n!)
bruteforce and overcomes 0-1 preservingO(2^n)
bruteforce (there is no other simple bruteforces I've thinked about here).Is there going to be a tutorial?
It seems Tutorial link under contest is wrong
Please hack my submission on problem D(Although someone helped me with my earlier idea about this problem right after contest but I came up eith a new method and passed the case he provided but got WA on test8...)I really don't know why this method got wrong answer...submission30755521 Thank you in advance.
The main idea I came up is to count the times every numbers appear int the sequence,and maintain a set containing all the missing numbers didn't come up in the sequence yet,and set a loop from 1 to n just to do such operation: if the number appear in this position is counted more than once,then replace it with the smallest number which didn't came up yet and decrease the counter of the original number in this position by 1(You will say this must be wrong but please go on reading...)After doing this we set a loop from 1 to n again and if find a position that the new number I just filled in it is larger than the original number in there before,then replace this number to the original number,push the replaced number(the bigger one) into a vector which contains all the numbers that must be replaced to more left position,at the same time maintain a vector to push back the last position of the original number in this sequence(it means that the bigger number will be put in sequence with the index as big as possible),then sort the position and the replaced numbers,and fill these pool numbers in these positions one by one.(Sorry for my bad English and description...
Thank you again for hacking this solution....
try this case
Your output
Answer
What's more...I failed to analyze the code so no solution or reason to be provided. :(
Thank you very much...
And now I think the reason why this code got wrong answer is just because in this method the sequence maybe have some missing numbers already in some positions which they are not going to be. (What a bad solution I created...:-(