首页 > 代码库 > CodeForces 507C Guess Your Way Out!(二叉树)

CodeForces 507C Guess Your Way Out!(二叉树)

 

实在太困 题都看错

先贴王大神的代码有空再做遍

技术分享
#include <cstdio>#include <cmath>#include <algorithm>#include <cstring>#include <iostream>#include <cstring>#include <queue>using namespace std;typedef __int64 LL;LL h,n;LL now1,now2;LL ans;void dfs(LL q,LL w,int vis,int high,LL sum){    if(high == h)    {        return;    }    LL mid = (q + w)/2;    if(vis == 0)    {        if(n <= mid)        {            ans += (sum * 2 - 2)/2 + 1;            dfs(q,mid,0,high + 1,sum/2);        }        else        {            ans++;            dfs(mid+1,w,1,high + 1,sum/2);        }    }    else    {        if(n <= mid)        {            ans++;            dfs(q,mid,0,high + 1,sum/2);        }        else        {            ans += (sum * 2 - 2)/2 + 1;            dfs(mid+1,w,1,high + 1,sum/2);        }    }}int main(){    int i;    while(scanf("%I64d %I64d",&h,&n)!=EOF)    {        ans = 0;        now1 = 1;        now2 = 1;        for(i = 0; i < h; i++)        {            now2 *= 2;        }               LL m = (now1 + now2)/2;        if(n <= m)        {            ans += 1;            dfs(now1,m,0,1,now2/2);        }        else        {            ans += (((now2 * 2) - 2)/2) + 1;                  dfs(m+1,now2,1,1,now2/2);        }        printf("%I64d\n",ans);    }    return 0;}
View Code

 

CodeForces 507C Guess Your Way Out!(二叉树)