23 小球下落(UVa679)

2021-09-02 23:49:27 字數 767 閱讀 7449

有一棵二叉樹,最大深度為d,且所有的葉子深度都相同。所有結點從上到下從左到右編號為1,2

,3,…

,2d−

11,2,3,…,2^d-1

1,2,3,

…,2d

−1。在結點1處放乙個小球,它會往下落。每個結點上都有乙個開關,初始全部關閉,當每次有小球落到乙個開關上時,它的狀態都會改變。當小球到達乙個內結點時,如果該結點的開關關閉,則往上走,否則往下走,直到走到葉子結點,如下圖所示。一些小球從結點1處依次開始下落,最後乙個小球將會落到**呢?輸入葉子深度d和小球個數i,輸出第i個小球最後所在的葉子編號。假設i不超過整棵樹的葉子數;d<=20。輸出最多包含1000組資料.

輸入:

4 2輸出:

12解決:

#include

#include

using

namespace std;

const

int maxn =20;

int s[

1<< maxn]

;// 初始化全為0,表示關閉

intmain()

}printf

("%d\n"

, k /2)

;}return0;

}

小球下落 UVa 679

問題描述 有一棵二叉樹,最大深度為d,且所有葉子的深度都相同。所有結點從上到下從左到右編號為1,2,3,2d 1。在結點1處放乙個小球,它會往下落。每個內結點上都有乙個開關,初始全部關閉,當每次有小球落到乙個開關上時,狀態都會改變。當小球到達乙個內結點時,如果該結點上的開關關閉,則往左走,否則往右走...

UVa679 小球下落(樹)

給下落的深度和小球個數,小球依次下落,結點有個開關,每到乙個結點,開關關向左,開向右 一開始想到了簡單模擬,結果超時 include include include define maxn 20 using namespace std int s 1 printf d n now 2 return ...

UVa 679 小球下落 二叉樹的編號

在結點1處放乙個小球,它會往下落。每個內結點上都會有乙個開關,初始全部關閉,當每次有小球落到乙個開關上時,狀態都會改變。當小球到達乙個結點是,如果結點上的開關關閉,則往左走,否則往右走,直到走到葉子的結點,如圖。分析 對於乙個結點k,其左結點和右結點分別為2k和2k 1。小球落到結點處,先改變,後選...