題目鏈結
思路:
沒想到是二分,以為是記憶化搜尋,可是記憶化搜尋的話我們一般求的是有多少種排列的種數吧.
注意到每乙個禮包都有
,乙個u盤,乙個滑鼠。
剩餘的,分別為乙個機械鍵盤,乙個u盤,乙個滑鼠。
當禮包數目為x時,我們
至多可以提供a-x個普通,b-x個幸運,c個豪華。
怎麼樣保證相鄰的禮包不同?
考慮禮包數最多的那個設為w,那麼就需要w-1種其他的來插進去,所以就要保證最小x和次小的禮包個數y,滿足x+y+1>=w,也就是說x+y最多滿足x+y+1個最多的禮包不相鄰,所以我們check時候只需要比較最小值+次小值+min(最小值+次小值+1, 最大值)與x的大小關係即可。
#includeusing namespace std;
int t,a,b,c;
vectorvt;
bool check(int x)
int main()
else
r=mid-1;
} printf("%d\n",ans);
} return 0;
}
計蒜客 1562 二分查詢
蒜頭君手上有個長度為 nn 的陣列 aa。由於陣列實在太大了,所以蒜頭君也不知道陣列裡面有什麼數字,所以蒜頭君會經常詢問在陣列 aa 中,比 xx 大的最小值是多大?但是這次蒜頭君要求這個數字必須大於 xx,不能等於 xx。輸入格式 第一行輸入兩個整數 nn 和 mm,分別表示陣列的長度和查詢的次數...
計蒜客 尋找插入位置 (二分查詢)
給定乙個已經公升序排好序的陣列,以及乙個數 target,如果 target在陣列中,返回它在陣列中的位置。否則,返回 target插入陣列後它應該在的位置。假設陣列中沒有重複的數。以下是簡單的示例 1,3,5,6 5 2 1,3,5,6 2 1 1,3,5,6 7 4 1,3,5,6 0 0 輸入...
D 二分查詢(二) 計蒜客 T1561
題目描述 蒜頭君手上有個長度為 n 的陣列 a。由於陣列實在太大了,所以蒜頭君也不知道陣列裡面有什麼數字,所以蒜頭君會經常詢問在陣列 a 中,大於等於 x 的最小值是多大?輸入格式 第一行輸入兩個整數 n 和 m,分別表示陣列的長度和查詢的次數。接下來一行有 n 個整數 ai 接下來 m 行,每行有...