getting wrong answer for Dragon Scroll

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>

inline int get_int()
{
	int n=0;
	char c=0;
	while(c<33)
		c=getchar_unlocked();
	while(c>='0'&&c<='9')
	{
		n=(n<<3)+(n<<1)+(c-'0');
		c=getchar_unlocked();
	}
	return n;
}
int main(int argc, char const *argv[])
{
	int t,n,a,b,number,totalones,i,quint;
	int chambernoa,chambernob, oneina,oneinb,logproblem1,logproblem2;
	scanf("%d", &t);
	while(t--)
	{
		number=0;
		n=get_int();
		a=get_int();
		b=get_int();
		if (a==0)
			chambernoa=1;
		else
			chambernoa=log2(a)+1;
		if (b==0)
			chambernob=1;
		else
			chambernob=log2(b)+1;
		logproblem1=log2(pow(2,chambernoa)-a);
		logproblem2=log2(pow(2,chambernob)-b);
		oneina=chambernoa-logproblem1;
		oneinb=chambernob-logproblem2;
		if ((oneinb+oneina)>n)
			totalones=(2*n)-oneina-oneinb;
		else
			totalones=oneina+oneinb;
		
		if (totalones>0)
			number=pow(2,--n);
		for (i=1;i<totalones;i++)
			number+=pow(2,--n);
		printf("%d\n", number);
	}
	return 0;
}

You are not calculating the total number of ones in the numbers “a” and “b” correctly. Have a look at this. It is the accepted version of your code.

1 Like

that was a great solution… and thank you…
can I know in what test cases my logic fails.
PS: it passed in the given test cases.

In case of 7 your code says it has 2 no of ones.

//