Editorial for CCC '16 S5 - Circle of Life
Remember to use this editorial only when stuck, and not to copy-paste code from it. Please be respectful to the problem author and editorialist.
Submitting an official solution before solving the problem yourself is a bannable offence.
Submitting an official solution before solving the problem yourself is a bannable offence.
Author:
Let be the current circle of life. Let denote the th generation of the circle, and be the th cell of the th generation of the circle. Note that the condition that exactly one neighbour is alive is the bitwise xor () operation. As such, .
Let us expand on this. , which simplifies to . To simplify this, we must note a few things about xor.
- xor is associative
This means we can simplify the above equation to . If we continue to expand, we note that for every which is a power of two, this holds:
This can be proven recursively: if satisfies the above equation, then so does .
Furthermore, since , for every set bit in , we advance it by that bit. For example, when , we advance by and then by to get our answer.
Time Complexity:
Comments
You can also solve this problem with FFT :P the problem essentially reduces to calculating the dot product of all the cyclic shifts of an array with another array, which is a classic FFT problem. The final complexity is with a big constant, but it can be constant optimized to pass. https://dmoj.ca/submission/5812412
Could someone help me understand how you know that after 60 steps you have the answer?
To clarify d's explanation, we know that the upper bound for is according to the problem statement. The binary representation for the maximum () is 11100011010111111010100100110001101000000000000000. We can see that the last bit is set at position . Thus the optimized version would start at .
The algorithm is concerned about the 's in the binary representation of . Only the last bits of have the choice to not be .
A more optimized version would start at .
By the way, who posted this code and gave the answer away?
fataleagle
*fetalbagle
This comment is hidden due to too much negative feedback. Show it anyway.