I am trying to solve this problem CM1404 Problem - CodeChef but i am getting wrong answer. can anyone tell me where i am wrong ?
- I am calculating the maximum number of piece can be cut using N line.
- To maximize this we have to divide N into two equal parts if N is even, else floor(N/2) and ceil(N/2).
- After that checking whether the given number fall into that range or not. Maximum number piece can be done = floor(N/2) * ceil(N/2)
- If number is perfect square then return (sqrt(n)-1)*2;
- Else, check whether the number fall into lower range o higher.
(i). If N > floor(N/2)*ceil(N/2) then return ((ceil(sqrt(N/2)))-1)*2) ;
(ii) Else return ((floor(sqrt(N/2)))-1)*2)+1;
here is the link of my code pizza.cpp · GitHub
You’re method is a bit wrong the pieces need not to be equal.
for ex if n=10 your code will give output 5 but 10 pieces can be obtained in 4 proper cuts.
I honestly don’t know why you have to divide N to 2 or even divide them. N means the sliced pizza already. What you’ve been asked in the problem is minimum number of SLICES for you to get N or greater than that. Well, to solve it, you can picture out the pizza and slice once, twice, thrice and so on.
As you can see, the best way to cut the pizza into its maximum, is to cut it straight through ALL the slices already. As shown above in the picture, you can get 2 pieces with 1 slice, 4 pieces with 2 slices, 7 pieces with 3 slices and 11 pieces with 4 slices. The problem didn’t state to cut the pizza equally so the cutting style should be OK.
The maximum number of pieces cut is also a sequence called “lazy caterer’s sequence”. You can read about it here:
Then, to solve the problem, you just have to check the range in which N first appeared.