給定一個包含N個整數的集合S={A1, A2, ... AN},以及一個給定的整數K,請計算有多少個S的子集滿足其中的最大值與最小值的和小于等于K。
例如對于S={4, 2, 5, 8}以及K=7,滿足的條件的子集有以下4個:{2}, {2, 4}, {2, 5}, {2, 4, 5}。
Input
第一行包含兩個整數N和K。
第二行包含N個整數A1, A2, ... AN。
對于30%的數據,1 <= N <= 20
對于70%的數據,1 <= N <= 1000
對于100%的數據,1 <= N <= 100000, 0 <= Ai <= 1000000000, 0 <= K <= 2000000000, A1 ~ AN 兩兩不同。
Output
輸出滿足條件的子集數目。由于答案可能非常大,你隻需要輸出答案除以1000000007的餘數。
Sample Input
Sample Output
題意:見題目描述
思路:這道題其實到現在我也沒能理解,但是有兩個結論先記下來:①:以第i個元素開頭,第j個元素結尾的集合的個數為2^(j-i-1)個(最大小值必定位于集合内,大小位于兩者之間的元素有j−i−1個,每個元素都有兩種可能性,出現/不出現)。②:以第i個元素開頭,第j以及所有x(i<x<j)結尾的集合共有2^(j-i)-1個。
舉例說明以上兩個結論: 集合 {1,2,3,4,5,6,7}
結論1:eg:i=2,j=5,集合有{2,5}、{2,3,5}、{2,4,5}、{2,3,4,5}共4個
結論2:eg:i=2,j=5,集合有{2,5}、{2,3,5}、{2,4,5}、{2,3,4,5}、{2,4}、{2,3,4}、{2,3}共7個
,
更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!