• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            C小加

            厚德 博學(xué) 求真 至善 The bright moon and breeze
            posts - 145, comments - 195, trackbacks - 0, articles - 0
              C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

            這道題糾結(jié)我了一天的時(shí)間,本以為用lowbit可以輕松搞定,可是中間出現(xiàn)了各種故障,WA了很多次才AC

            計(jì)算ab之間的節(jié)點(diǎn)數(shù),可以用1-a1-b的節(jié)點(diǎn)數(shù)之差來求。在右子樹的點(diǎn)可以轉(zhuǎn)化為相應(yīng)的左子樹的點(diǎn),經(jīng)過多步驟的轉(zhuǎn)化,可以把點(diǎn)的位置固定在樹的最左邊的那條線上。所以只需要計(jì)算每層最左邊的節(jié)點(diǎn)數(shù)就OK了。經(jīng)過遞推會(huì)得出一個(gè)公式,z[i]=z[i-1]*2+i-1;i表示樹的高度。

            #include<iostream>
            #include<cstdio>
            #include<cmath>
            using namespace std;
            typedef long long ll;
            ll z[33]={0};//從1到n經(jīng)過的點(diǎn)
            ll d[33]={0};//樹每層最左邊的序號(hào)
            void init()
            {
                for(int i=2;i<=31;i++)
                {
                    z[i]=z[i-1]*2+i-1;
                }
                d[1]=1;
                for(int i=2;i<=31;i++)
                {
                    d[i]=d[i-1]<<1;
                }
            }
            ll lowbit(ll x)
            {
                return x&(-x);
            }

            //得到數(shù)的二進(jìn)制位數(shù)
            ll getbit(ll x)
            {
                ll cnt=0;
                while(x!=1)
                {
                    x>>=1;
                    cnt++;
                }
                return cnt;
            }
            void swap(int& a,int& b)
            {
                int temp=a;
                a=b;
                b=temp;
            }
            ll fun(ll x)
            {
                return d[getbit(x)+1];//得到位數(shù)對應(yīng)的二進(jìn)制數(shù)
            }
            ll solve(ll x)
            {
               ll bx=x-lowbit(x);
                if(bx==0)
                {
                    return z[getbit(x)];
                }
                else
                {

                    int temp=fun(x);
                    ll sum=solve(temp)+abs(solve(temp)-solve(temp-(x-temp)));

                    return sum;
                }
            }


            int main()
            {
            init();
                int a,b;
                while(scanf("%d %d",&a,&b)!=EOF)
                {

                    if(a>b) swap(a,b);
                    ll ba=solve(a);
                    ll bb=solve(b);
                    printf("%lld\n",bb-ba);
                }
                return 0;
            }

            久久国产精品-国产精品| 久久99国产一区二区三区| 精品无码久久久久久尤物| 99久久中文字幕| 女同久久| 狠狠色丁香久久综合婷婷| 亚洲精品国产第一综合99久久| 一本色道久久88精品综合| 精品久久一区二区| 久久精品视频一| 久久国产精品免费一区二区三区| 日韩va亚洲va欧美va久久| 久久精品人人做人人妻人人玩| 久久久久黑人强伦姧人妻| 国产精品久久一区二区三区| 伊人 久久 精品| 国产成人综合久久精品尤物| 国产美女久久精品香蕉69| 精品久久久久久无码不卡| 久久99国产精品成人欧美| a级成人毛片久久| 奇米综合四色77777久久| 久久经典免费视频| 一本久久免费视频| 青青久久精品国产免费看| 国产国产成人精品久久| 久久久婷婷五月亚洲97号色| 国产成人无码精品久久久性色| 色播久久人人爽人人爽人人片aV| 国产精品久久久久影视不卡| 色欲久久久天天天综合网| 少妇高潮惨叫久久久久久| 久久精品中文字幕一区| 久久亚洲熟女cc98cm| 久久亚洲AV无码精品色午夜 | 久久精品国产一区二区电影| 亚洲中文久久精品无码ww16| 久久只有这里有精品4| 日韩欧美亚洲综合久久| 久久精品免费全国观看国产| 亚洲伊人久久成综合人影院 |