2012-01-23 23 views
-1

下面是我從鏈接複製的代碼http://progspedia.blogspot.com/2011/05/679-dropping-balls.html#comment-formACM下探球

#include<stdio.h> 

int main() 
{ 
    int t,D,I,P,i,j; 
    //freopen("in.txt","r",stdin); 

    while(scanf("%d",&t)==1&&t>0) 
    { 
     for(i=0;i<t;i++) 
     { 
      scanf("%d%d",&D,&I); 
      P=1;D--; 

      for (j=0;j<D;j++) 
      { 
       P= I&1 ? (P<<1) : (P<<1)+1; 
       I=(I+1)>>1; 
      } 
      printf("%d\n",P); 
     } 
    } 
    return 0; 
} 

代碼完美運行,但我不明白這個代碼是如何保持的東西音軌哪些子樹,我們必須去級別1之後。如果有人幫助我,那對我會很有幫助。

鏈接的問題是http://uva.onlinejudge.org/index.php?option=onlinejudge&page=show_problem&problem=620

+1

如果你不明白,那麼你可能不應該複製它;-)如圖所示,這什麼都不做,你需要包含打開文件的行,並確保* in.txt *包含有效輸入問題。 – AJG85

+4

你應該自己弄清楚這一點。你明白這個問題嗎?你知道如何在紙上解決它嗎?如果是這樣(如果你想使用複製的代碼)啓動一個調試器,看看輸入做了什麼,以及這與你對應該發生什麼的理解是一致的。但最好的解決辦法是先解決問題。 – Bart

回答

1

P跟蹤

遍歷決定在這裏提出的具體節點(因此子樹)。

  P= I&1 ? (P<<1) : (P<<1)+1;