雖然本題 ,但其實我們可以先討論一些 ,如果 時,因為用正三角形的緣故,角度只能組合出 或 ,而如果 ,已知七邊形的內角和為 ,而 ,所以發現 時一定組不出來 (不論 如何,更大的 算出來平均只會更大),所以接著我們只要討論 的情況即可。
三角(邊)形的內角和為 ,只有一種拆法 : ,也就是是正三角形的時候,所以其實如果 是完全平方數的時候就可以構造出來,否則就不行,這個檢查可以用 或 的複雜度求得 (根據實作方法) 。
以上是一個構造方法,發現只要 都有解 (梯形) 。
我們先不討論 ,因為其實他和 很相似。
其實每個六邊形都可以分成像這樣,三個部分,會發現綠色部分是類似平行四邊形這樣,然後藍色跟紅色的的部分是等腰梯形,我們如果像上圖一條一條線算他們的三角形數,會變成下面這樣(假設綠色的一條是 ) :
綠色 :
紅色 :
藍色 :
我們可以窮舉 ,然後先算出紅色及藍色的面積,然後綠色的面積其實就會是 - 紅色 - 藍色,然後檢查這東西能否整除 就好了。
那 的上界要到多少呢,一般來說應該要是到 ,但是其實一個六邊形可以想像成一個大的正三角形截去三個角,所以其實弄到 就行了,因此檢查一個的時間複雜度是 。
同上面的解法,把 其中一個固定成 就是 的解法了。
我們可以發現不管哪一種 最多一筆測資需要 的時間判斷, 筆就是 ,已經足夠快通過。 (感謝 Ststone 提供解題方向) 另外,如果改變一下實作方法,其實也可以做到 ,不過這題 ,所以本來的方法其實就夠快了。
後面是一些偷吃步 : 的情況,其實有試著在本機建表過 (跑完所有小於 的 ),但其實最後一組不能構造出來的 遠小於題目的範圍限制 (這點我還不知道怎麼證明),所以其實本機建表也不是行不通,然後感謝 inversion 這篇 blog 其實有提到相關的方法,他也有說有一篇論文就是在證明 的補集是有限集合,有興趣的可以參考看看。