Quantcast
Channel: CodeChef Discuss - latest questions
Viewing all articles
Browse latest Browse all 40121

Why Wrong Answer : My BINTREE code ?

$
0
0
#include <stdio.h>
#include<math.h>
long int poww(long int to)
{
    if(to==0)
    return 1;

    return 2*poww(to-1);
}
long int other_path(long int h,long int l)
{
    long int path=0;
    while(h!=l){
        path+=2;
        h/=2;l/=2;
    }
return path;
}


long int level(long int i)
{return (long int)(log10((double)i)/log10((double)2));}


int main(void) {

    long int t;
    scanf("%ld",&t);
    long int i,j,l_i,l_j,l_df,ans;

    while(t-- > 0)
    {
        scanf("%ld %ld",&i,&j);
        if(i>j)
            {i=i+j; j=i-j; i=i-j;} // assigning max(j,i) to j and other i is always smaller one

        l_i=level(i);
        l_j=level(j);

        l_df=l_j-l_i;
        ans = l_df + other_path(j/poww(l_df),i); 
        /*bring them to same level and then decrease them to the common parent*/

            printf("%ld\n",ans);
    }

    return 0;
}

Viewing all articles
Browse latest Browse all 40121

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>