【UVa 679】Dropping Balls(小球下落)

来源:https://www.cnblogs.com/kannyi/archive/2018/03/10/8540158.html
-Advertisement-
Play Games

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


Description

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

Input & Output

一些小球從結點1處依次開始下落,最後一個小球將會落到哪裡呢?輸入葉子深度D和小球個數I,輸出第I個小球最後所在的葉子編號。假設I不超過整棵樹的葉子數;D<=20。輸出最多包含1000組數據。
Sample Input
4 2
3 4
10 1
2 2
8 128
16 12345
Sample Output
12
7
512
3
255
36358

#include<cstdio>
#include<cstring>
#define MAX 20
int s[1<<MAX];                    //1<<MAX 即是 2MAX ,最大節點數為 2MAX-1
int main(void)
{
    int D,I;
    while(scanf("%d%d",&D,&I)==2) // ==2 的意思是:如果D和I都被成功讀入,那麼scanf的返回值為2
    {
        memset(s,0,sizeof(s));    //開關,初始全設置為0(預設關閉)
        int k,i,n=(1<<D)-1;       //n是最大結點數
        for(i=0;i<I;i++)          //連續讓I個小球下落
        {
            k=1;
            for(;;)
            {
                s[k]=!s[k];              //狀態改變公式,1和0的相互轉換
                k = s[k] ? k*2 : k*2+1;  //
                if(k > n) break;         //落出界了
            }
        }
        printf("%d\n", k/2);             //“出界”之前的葉子編號
    }
    return 0;
}

分析
① 對於一個結點k,它的左結點,右結點的編號分別是2k和2k+1。
② 儘管每次小球都是嚴格下落D-1次,但上述代碼中採用 if(k>n) break 的方法判斷“出界”更具一般性。
③ 該程式運算量太大:由於I可以高達2(D-1),每個測試數據下落總層數可能會高達219*19(即I*19)=9961472,而一共可能有1000組數據。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • ...
  • 1、@Controller 在SpringMVC 中,控制器Controller 負責處理由DispatcherServlet 分發的請求,它把用戶請求的數據經過業務處理層處理之後封裝成一個Model ,然後再把該Model 返回給對應的View 進行展示。在SpringMVC 中提供了一個非常簡便 ...
  • 查找最大的N個元素——堆數據結構 給出序列,求出TopK大的元素,使用小頂堆,heapq模塊實現 ...
  • 第一種:點對點 第二種: 發佈者/訂閱者 啟動順序:先訂閱、再發佈 ...
  • 函數:就是讓程式模塊化,把具有獨立功能的代碼塊當成一個整體封裝成一個函數 首先列印一個佛主看看: 那麼這個時候我們想列印很多遍佛主的話,總不能一直複製粘貼,所以我們需要定義一個列印佛主函數: 帶有參數的函數 首先我們來定義一個函數來計算兩個數的總和: 這樣會不會有點太死板了,我們希望能夠從鍵盤輸入a ...
  • 什麼情況下使用ActiveMQ? 1 多個項目之間集成 (1) 跨平臺 (2) 多語言 (3) 多項目 2 降低系統間模塊的耦合度,解耦 軟體擴展性 3 系統前後端隔離 前後端隔離,屏蔽高安全區 安裝步驟: 第一步:安裝jdk,因為activemq依賴jdk來運行 請參照: Linux中安裝jdk ...
  • 安裝pyenv$ git clone git://github.com/yyuu/pyenv.git ~/.pyenv $ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc $ echo 'export PATH="$PYENV_ROOT/bi... ...
  • 在python中,有個好用的模塊linecache,該模塊允許從任何文件里得到任何的行,並且使用緩存進行優化,常見的情況是從單個文件讀取多行。linecache.getline(filename,lineno)從名為filename的文件中得到第lineno行示例:從final.txt文件中讀取數據 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...