Editorial for DMOPC '21 Contest 2 P3 - Divisions
Submitting an official solution before solving the problem yourself is a bannable offence.
Author:
Subtask 1
It helps to think about this problem in binary. Then, division by  is equivalent to simply truncating the last digit of the number. This also means that the string of bits we may keep after any number of operations will be some prefix of the original numbers 
 and 
. So, we should keep the longest common prefix (LCP) of 
 and 
 in binary in order to minimize the number of operations to make 
. Thus, the answer to the problem Alice solved is just 
, where 
 and 
 are the binary lengths of 
 and 
 respectively, and 
 is the length of the longest common prefix of 
 and 
 in binary. Using this information, we know that we can deduce 
 if we know the answer to the problem and both of 
 and 
.
First of all, let's make a query with , which will tell us 
. Then, we will work our way from the most significant bit in 
 (which we know from the 
 query) to the least significant bit. For each bit 
, let's query 
 as the currently known prefix of 
 (all bits before bit 
) with bit 
 equal to 
. If after working out 
 we find that it is greater than our current LCP length, we know that bit 
 is 
. If it remains the same length, then bit 
 must be 
. With this strategy, we can work out one bit of information per query which gives around 
 queries per number, enough to pass the first subtask.
Subtask 2
Let's try and extend our solution from the first subtask. If bit  is indeed 
, then can't we also get information about bit 
? In fact, yes we can! We can figure out all of the bits until the first bit which does not match with our guess, and we know how much we matched based on how much the LCP length changes. Now, how many new bits of information can we get if we completely randomize the unknown suffix of 
? Let's calculate this by estimating the expected match length. By probability, we have a 
 chance of matching the 
-th bit, 
 chance of matching the 
-th, 
 chance of matching the 
-th, and so on. Therefore, the expected match length is 
. We can figure out the incorrectly matched bit on top of this, so we actually get around 
 bits of new information per query! This puts us at around 
 expected queries per number, which is enough for full marks.
P.S. The author would like to note the similarity between this solution and a particular game featured in Squid Game, which is actually completely coincidental. In any case, it may help you really visualize what's going on here.
Comments
Wait I am mad confused how is the second solution getting 2 bits of information per query? Like if we see it as a graph were the root is labelled 1 and the child is just adding 1 or 0 behind that number in binary. The operation is the distance between the nodes x and y which is basically what subtask one is about. correct me if my understanding is wrong.
Your understanding is wrong. Yes, you could think of
 as an operation on the graph you described. However, what subtask 2 does is make a random guess for the number, and it turns out that we get one extra bit of information per guess as outlined in the solution.
Can't wait for season two of squid game