【題意簡述】:二叉樹,根節點為(1,1),現在每個節點設為(a,b)它的左孩子是就是(a+b,b),同理右孩子就是(a,a+b)。現在已知這個節點了,求其從根節點開始經過幾次向左的發展,幾次向右的發展!
【思路】:我們可以通過一個逆向的思維去解決這道題,起點就是輸入的數據,終點就是根節點!這個時候我們就可以從測試數據裡找一些規律,我們不難發現使用輾轉相除就能解決這個問題!(其實我最開始用的還是輾轉相減,導致我TLE,但仔細一想便不難得知,輾轉相減與輾轉相除,本就是“一家”啊!!經過改正後,順利AC!)
詳見代碼:
//228K 16Ms #includeusing namespace std; int main() { int t,a,b; int suml,sumr; cin>>t; int count = 1; while(t--) { cin>>a>>b; suml = 0,sumr = 0; while(1){ if(a>b){ suml+=a/b; a = a % b; //循環終止條件! if(a == 0){ suml = suml-1; break; } } else { sumr+=b/a; b = b % a; if(b == 0) { sumr = sumr-1; break; } } } cout<<"Scenario #"<