Newcoder 148 H.Rikka with Ants(計算幾何+遞迴)
Description
二維平面上有兩隻螞蟻初始在點,有三條直線:
,沒有螞蟻可以越過這條線
,只有第二隻螞蟻可以越過這條線
,只有第一隻螞蟻可以越過這條線
注意到螞蟻只能往上走和往右走,且如果螞蟻可以往上走就先往上走,不能往上走了再往右走,故兩隻螞蟻的路徑唯一,問被兩隻螞蟻均經過的整點個數
Input
第一行一整數表示用例組數,每組用例輸入四個整數
Output
如果兩隻螞蟻均經過的整點有無限個則輸出,否則輸出整點個數,結果模
Sample Input
5 1 1 1 1 1 2 1 1 1 3 2 1 1 100 1 99 12 34 56 78
Sample Output
-1 2 1 5049 3
Solution
顯然若兩條直線重合則兩隻螞蟻均經過的整點有無窮個,假設,兩隻螞蟻若都經過點,那麼螞蟻要麼從往上走到達點,要麼從點無法到達點只能往右走到達點,故有 由知只需滿足式即可,問題轉化為求和與軸圍成三角形中整點的個數(不包括原點以及上的整點),這顯然是有窮個點,假設兩條直線內整點橫座標最大值為,則輕易得到 那麼我們只要求出在範圍內與軸圍成整點的個數,再減去在範圍內與軸圍成的縱座標非負的整點個數即為答案
對於第一部分,顯然有 對於第二部分,先把直線向左平移一個單位,然後想上平移一個答案,則第二部分答案等價於在範圍內與軸圍成的縱座標為正的整點個數,也即為 令,則所求答案為,只要求出即可
1.若,則顯然
2.若不全小於,那麼把這個下取整的兩塊整數拿出來,也即 進而有 3.若,回到該式的幾何意義,即為直線在範圍內與軸圍成的區域中縱座標為正的整點個數,由於,故該範圍沒有橫座標的整點,記該區域整點縱座標最大值為,則有 對於範圍內的個整點,不合法整點為直線與軸圍成的、橫座標為正且不在直線上的整點,這些整點也即為與軸圍成的橫座標為正的整點個數,交換兩個座標軸即為