Question - Marbles. Why does it show wrong answer? Answer is simply (n-1)C(k-1).

, ,

Link to the question - MARBLES Problem - CodeChef

#include<iostream>

#include <algorithm>

using namespace std;

int main()

{

	int i, T;

	long int j, n, k, lnMin; 

	long long int Outputs[100];

	double llnTemp=1.0;

	cin>>T;

	for(i=0;i<T;i++)

	{

		cin>>n;

		cin>>k;

		lnMin=(min(k-1,n-k));

		for(j=1;j<=lnMin;j++)

		{

			llnTemp/=j;

			llnTemp*=(n-1);

			n--;

		}

		Outputs[i]=llnTemp;

	}

	for(i=0;i<T;i++)

		cout<<Outputs[i]<<endl;

}

@s1d_3 your corrected


[1].


  [1]: http://www.codechef.com/viewsolution/3149943
1 Like

When you do llnTemp /= j, there is a possibility that at some point llnTemp is not completely divisible by j and this results in a WA. So it is better to first multiply llnTemp by (n-1) and then divide it by j. Moreover you have to initialize llnTemp to 1.0 in each testcase. Hope you got what you needed !

1 Like

The “code” link is not working. Could you please cut-paste the whole code?

Or better, could you tell me where exactly my code has problems? I am new here. It would better help me if I understood the error and wrote the code myself!

Actually I had made it double so that even if its not divisible, it would be cool. But ultimately in my final submission I made it int and used the *= first. Very sorry for the stupid error of not re-initializing llnTemp every time. Thanks for your time.