I am trying to solve this problem http://www.codechef.com/problems/CM1404 but i am getting wrong answer. can anyone tell me where i am wrong ?

My algorithm

- 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 https://gist.github.com/Shravan40/cc9c509d325c0c959df6

1 Like

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:

link text

Then, to solve the problem, you just have to check the range in which N first appeared.

Happy coding~

2 Likes