這道題是找規律加優化題。
乙個重要的出發點是從下往上找。對於(a, b),其左節點是(a+b, b)。我們可以看到新的節點,即左節點,其左邊大於右邊。同樣地,右節點是(a, a + b),我們可以看到其右邊大於左邊。我們由此可以總結出如下規律:對於任一節點(a, b),如果左邊大於右邊,我們知道它是左節點,其父節點是(a-b, b);如果右邊大於左邊,則是右節點,其父節點是(a, b - a)。由此從下往上推,我們最終會到達(1, 1),此時a = b。
乙個優化是left += a / b; a %= b。這樣可以避免a -= b, a -= b等多次運算,優化執行時間。
thestoryofsnow
2499
accepted
116k
16ms
c++786b
/*
id: thestor1
lang: c++
task: poj2499
*/#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std;
int main()
} else
}} printf("scenario #%d:\n", t + 1);
printf("%d %d\n\n", left, right);
} return 0;
}
poj解題報告 1328
不得不說,這題是讓我飽受折磨,畢竟第一次做貪心演算法,而且wa了好多次,幸好有學長的幫助,最終找到了問題所在,是在快排上是問題,double高位不可向int低位轉換,由於一開始強制轉換導致雖然樣例和其他的測試資料過了,但還是wa,現在改完了就對了,附上ac ps 這題通過率是22 真心不簡單 如下 ...
poj解題報告 2586
這題我是用的貪心演算法,其實不用也可以,列舉也能解決,因為情況不多。因為是每連續5個月必有虧損,而一年只有1 5,2 6,3 7,4 8 8 12共8種情況。現在設盈餘為s,虧損為d,可列出以下幾種情況。ssssdssssdss 4ssssddsssddss 3s 2d ssdddssdddss 2...
poj解題報告 2635
這題特別好理解,就是 坑啊。題意就是給乙個數,這個數是兩個大素數的積,再給出乙個數,如果最小的素數比給的數大,列印good,否則列印bad和最小的素數。這題用的方法是高精度求模 同餘模定理。還有素數打表,把10 6內的素數全部預打表,在求模時則列舉到小於l為止。注意打表不能只打到100w,要保證素數...