2783 魔法藥水 二分

2021-10-22 14:06:27 字數 2045 閱讀 6139

小a終於來到了最後一題。小明翻找自己的揹包,發現了很多能夠提公升自己能力值的藥水。小a共發現了n種藥水,第i種藥水有ai瓶,使用後能使能力值加bi。但相同種類的藥水,是不能連續使用的。小a覺得自己至少將能力值提公升x(x>=1),才有把握ak這場新生賽。藥水的味道並不好,小明想盡量少的使用藥水。你能告訴小a,他至少使用多少瓶藥水, 才能使自己的能力提公升至少x?

//#include 

//#pragma gcc optimize(2)

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define go(i, l, r) for(ll i = (l), i##end = (ll)(r); i <= i##end; ++i)

#define god(i, r, l) for(ll i = (r), i##end = (ll)(l); i >= i##end; --i)

#define ios ios_base::sync_with_stdio(0),cin.tie(0),cout.tie(0)

#define debug_in freopen("in.txt","r",stdin)

#define debug_out freopen("out.txt","w",stdout);

#define pb push_back

#define all(x) x.begin(),x.end()

#define fs first

#define sc second

using

namespace std;

typedef

long

long ll;

typedef

unsigned

long

long ull;

typedef __int128 bigint;

typedef pair pii;

const ll inf_int =

1e9+10;

const ll inf_ll =

1e17

;void

read

(int

&x)void

read

(ll &x)

template

<

classh,

class..

. t>

void

read

(h& h, t&..

. t)

voidpt(

)template

<

classh,

class..

. t>

void

pt(h h,t.

.. t)

//--------------------------------------------

const

int maxn =

1e6+10;

ll n,x;

struct node

}arr[maxn]

;ll judge

(ll mid));

curx -

= cnt * y;

left -

= cnt;

if(left ==0)

break;}

if(left >0)

return1;

else

if(curx <=0)

return2;

else

return0;

}ll solve()

printf

("%lld\n"

,ans);}

intmain()

;}solve()

;return0;

}``

魔法水 二分

description 行c列的網格s 每個小格仔要麼有乙個需要去打敗的匈牙利樹蜂龍,要麼是他的老師斯內普離開他時留下的一瓶魔法藥水。有龍的格仔 i,j 需要花費 s i j 的力量點,而有魔法藥水的格仔 i,j 可以恢復哈利波特 s i j 的力量。如果哈利波特的力量在任何時候掉到了0 或更少,那...

bzoj3343 教主的魔法 分塊 二分)

原題位址 題意 由不超過1000的正整數組成的序列,標號1,2,3 n。教主的魔法 有m個詢問或操作,每次操作可以把閉區間 l,r 1 l r n 內的數全部加上乙個整數w,每次詢問閉區間 l,r 內有多少數大於等於c。資料範圍 n 1000000,q 3000,1 w 1000,1 c 1,000...

P7287 EZEC 5 魔法 貪心 二分

一開想列舉答案區間 l,r l,r l,r 發現這樣列舉會炸。正解是列舉操作次數,而且注意到最優的操作肯定是先 再乘的。所以我們可以列舉乘的次數,然後二分加的次數,至於找最大區間就可以貪心,o n o n o n 求出最大欄位和即可。注意二分的下界是0,上界不要太大,不然會爆lon glon glo...