照定義間作一張表 測試這數字是不是Bisqaure Number
再來把Bisqaure Number作成一個vector
接下來去枚舉B(有一個上限)
然而A一定是一個Bisqaure Number 故從vector中枚舉
算好A的上界之後
照定義間作一張表 測試這數字是不是Bisqaure Number
再來把Bisqaure Number作成一個vector
接下來去枚舉B(有一個上限)
然而A一定是一個Bisqaure Number 故從vector中枚舉
算好A的上界之後
其實去年看過 只是沒有去解
解法是觀察他的數字跟長度(Interval)
譬如說10
則
10/1 = 10
10對上的是1( 10 / 10)
他情況就是
10 .... 1 1 1 1 1
再來i = 2
10 / 2 = 5 而他對上的是 10 / 5 = 2
因此情況是
... 5 ... 2 2 ...
最後是i = 3
10 / 3 = 3 而他對上的是10 / 3 = 3
注意 當他的counterpart相等時
只算一次
你可以把整個數列列出來觀察 就知道了 而且可以去證明sq使得N/i跟他的counterpart相等時 該數字只有一個
10 5 3 2 2 1 1 1 1 1
有點像燈泡題
你會知道每種功能最多用三次 否則跟沒用是一樣的(進入循環)
再來就是你會發現其實可以用一個Table去紀錄目前最佳解
有兩種作法 是BFS跟DFS
我這邊是DFS 所以我Table紀錄目前最佳步數
主要就是枚舉已經回文的情況 這樣長度9也只需要5000個檢查
然後在才就是用SIEVE找質數(也可用LINEAR SIEVE)但之前實測 10000這種小數快沒多少
所以我用SIEVE寫起來比較快一點
另外注意第一個數字絕對是奇數 所以長度9才是5000個
(1 3 5 7 9) ? ? ? ? 這樣的排列組合
USACO 銀牌題組
先利用線段樹
然後update一個區間 該區最高高度為bound的高度減一
不過要先排序
因為若一個區間 被另外一個區間包含 則該區間應該要在比較大的區間做完之後再作