Codeforces325 B 二分搜尋

2022-04-11 00:10:26 字數 854 閱讀 3611

題目:b. stadium and games

分析:問題可以轉化為下面的等式求解問題:

由於n在10^18範圍內,所以k的範圍是從0到63即可,這樣就可以列舉k,二分m,然後所有符合條件的

就是答案了。

注意這裡資料範圍的處理,不注意的話就會溢位的。

#include #include #include #include using namespace std;

typedef long long ll;

ll a[100005];

ll c;

void solve(ll n)

{ ll k;

for(k=0;k<63;k++)

{ll l=1,r=3*1e9;

if(k>=30) r=1000000000000000000>>k;

while(l<=r)

{ll mid=(l+r)>>1;

ll ans=(((ll)1<2*n) r=mid-1;

else if(ans<2*n) l=mid+1;

else

{if(mid&1) a[c++]=mid*((ll)1<>n)

{c=0;

solve(n);

sort(a,a+c);

if(c==0) puts("-1");

else

{for(i=0;i

Codeforces 1119B 貪心二分

不改變原陣列的值,複製乙份,要求1 k連續,則1 mid區間內判斷 子陣列從大到小排序後,每兩個相差不大,比較均勻 i 2 倒著的目的是前大後小 能裝前一定能裝後 盡量裝更多的 累積高度和 跳著累積高度和,如果 h 可增加更多的瓶子,否則高度太多瓶子太多,減小瓶子數量 const int maxn ...

codeforces 321 B 排序 二分

題意 n個人,每個人有money和friendship,求最大的friendship和,要求所選的人money之差小於d 思路 先按money排序,然後掃一遍,兩個指標l,r記錄當前二分範圍,prem記錄當前所選人中最小的money。注意 如果二分找到k,a i m d a k m,當前t就等於a ...

Codeforces325 D 並查集維護連通性

參考 大牛blog 思路 因為是環,所以可以複製一下圖,先判斷一下和他是不是和與他相鄰的8個之一的乙個障礙使得構成了乙個環,環就是乙個連通,用並查集維護即可 如果沒有就ans 然後並把這個點加入。大致意思就是這樣。include include include include include inc...