hdu5573 二叉樹找規律,二進位制相關

2022-08-14 07:42:17 字數 1222 閱讀 2096

input

t 1<=t<=100

n k  1<=n<=1e9  n<=2^k<=2^60

output

輸出每行輸出這一層的數,再輸出加還是減

做法:可以發現每次都往×2走時e可以得到<2^k的所有奇數,然後a將最後乙個改為2^k+1就可以在原來的基礎上得到所有偶數

如用1,2,4,8通過加減可以得到-1,1,-3,3,-5,5,-7,7,然後1,2,4,9通過加減就可以得到-2,2,-4,4,-6,6,-8,8

然後根據n的二進位制就可以確定加還是減,如4層時n的二進位制是0011,因為是正數,第一位必為+,再找到第乙個是一的,一直減到這一位即可,即8-4-2+1

1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 

10 #include 11 #include 12 #include 13

#define max 100000

14#define ll long long

15using

namespace

std;

16int a[70],n,m,k,cas=1

,t;17

intmain()

1833

for(int i=k,idx;i>0;i--)

3440

//printf("i:%d idx:%d\n",i,idx);

41if(i<=0) break;42

if(a[i]&&i!=idx) swap(a[i],a[idx]);43}

44for(int i=1;i"

%lld %c\n

",1ll<

+':'-'

);45 printf("

%lld %c\n

",1ll<

+':'-'

);46

//ll sum=0;for(int i=1;i<=k;i++) sum+=(1ll<

47//

if(!(m&1)) sum++;printf("%lld\n",sum);48}

49//

printf("time=%.3lf",(double)clock()/clocks_per_sec);

50return0;

51 }

view code

HDU5573 二進位制思想 構造

沒有想到二進位制,以為是在樹上dp。所以也不知道怎麼dp。首先可以確定的是 滿二叉樹 最左面的可以表示所有的值。但是題目要求 不是加就是減,所以乙個減號相當於兩倍的減 每一項相加得到結果,這個數變為負的 就是算出 1 include include include include 首先可以確定的是,...

二叉樹 二叉樹

題目描述 如上所示,由正整數1,2,3 組成了一顆特殊二叉樹。我們已知這個二叉樹的最後乙個結點是n。現在的問題是,結點m所在的子樹中一共包括多少個結點。比如,n 12,m 3那麼上圖中的結點13,14,15以及後面的結點都是不存在的,結點m所在子樹中包括的結點有3,6,7,12,因此結點m的所在子樹...

樹 二叉樹 滿二叉樹 完全二叉樹 完滿二叉樹

目錄名稱作用根 樹的頂端結點 孩子當遠離根 root 的時候,直接連線到另外乙個結點的結點被稱之為孩子 child 雙親相應地,另外乙個結點稱為孩子 child 的雙親 parent 兄弟具有同乙個雙親 parent 的孩子 child 之間互稱為兄弟 sibling 祖先結點的祖先 ancesto...