暴力是不行滴!
google或是看uva討論板,都是寫些我看不懂的算則(遮臉),
最後在這裡,
終於看到一個看得懂的算則了。
很直觀的想法,但我竟然沒想到 orz。
大意就是門牌號碼i往上遞增時,左邊的總數加第i - 1個號碼,
右邊的總數先減去第i個號碼,再從j + 1開始往上加,直到找到滿10組解。
(ps 要先找到第一組解才行)
/* ACM 138 Street Numbers * mythnc * 2011/11/14 07:54:27 * run time: 0.3 */ #include <> int main(void) { long long i, j, pre, next; int count; printf("%10d%10d\n", 6, 8); pre = next = 15; j = 9; for (i = 7, count = 1; count < 10; i++) { pre += i - 1; next -= i; for (; next < pre; j++) next += j; if (next == pre) { printf("%10lld%10lld\n", i, j - 1); count++; } } return 0; }
沒有留言:
張貼留言