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 #includeview code10 #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 }
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...