問題描述
集合m至少有兩個元素(實數),且m中任意兩個元素差的絕對值都大於2,則稱m為「翔集合」,已知集合s=,請求出n的子集中共有多少個翔集合。
輸入格式
輸入共一行,乙個整數n.(n>=2)
輸出格式
輸出共一行,乙個整數表示s的子集中共有多少個翔集合,由於個數可能過大,請輸出這個值除以1000007的餘數。
樣例輸入
4樣例輸出
1資料規模和約定
對於20%的資料,2<=n<=1000000
對於100%的資料,2<=n<=10^15
本題需要矩陣乘法求解。我們假設an為最大數為n時包含所有翔集合的總數,分析他的組成,可以由含有n和不含有n的翔集合相加。
1,不含有n的翔集合總數顯然為an-1。
2,而含有n的如何分析呢,我們可以這樣想,因為翔集合每個元素之間的差的絕對值大於2,所以我們可以在最大數為n-3時構成的每乙個翔集合中後面都加乙個n,但是由於翔集合中元素數量最少為2,這樣構成後,顯然只包含了3個及以上的含n的翔集合an-3。
3,單獨分析含n的二元翔集合,很簡單為n-3個,即n與不大於n-3的數構成的二元集,
綜上得出通項:an = an-1+an-3+(n-3)
滾動陣列或矩陣乘法求出即可。
得出通項後可構造矩陣
試題 演算法訓練 猴子吃包子
試題 演算法訓練 猴子吃包子 資源限制 時間限制 1.0s 記憶體限制 256.0mb 問題描述 從前,有乙隻吃包子很厲害的猴子,它可以吃無數個包子,但是,它吃不同的包子速度也不同 肉包每秒鐘吃x個 韭菜包每秒鐘吃y個 沒有餡的包子每秒鐘吃z個 現在有x1個肉包,y1個韭菜包,z1個沒有餡的包子 問...
試題 演算法訓練 猴子吃包子
問題描述 從前,有乙隻吃包子很厲害的猴子,它可以吃無數個包子,但是,它吃不同的包子速度也不同 肉包每秒鐘吃x個 韭菜包每秒鐘吃y個 沒有餡的包子每秒鐘吃z個 現在有x1個肉包,y1個韭菜包,z1個沒有餡的包子 問 猴子吃完這些包子要多久?結果保留p位小數。輸入格式 輸入1行,包含7個整數,分別表示吃...
試題 演算法訓練 猴子吃包子
資源限制 時間限制 1.0s 記憶體限制 256.0mb 問題描述 從前,有乙隻吃包子很厲害的猴子,它可以吃無數個包子,但是,它吃不同的包子速度也不同 肉包每秒鐘吃x個 韭菜包每秒鐘吃y個 沒有餡的包子每秒鐘吃z個 現在有x1個肉包,y1個韭菜包,z1個沒有餡的包子 問 猴子吃完這些包子要多久?結果...