比較好的一道題,我們定義三個堆,q1,q2,q3,前兩個堆維護的要去的商店,q3維護的是不去的商店。當q1中的數量大於k之後我們就可以討論q2和q3了,如果我們q2中有的時間大於q3的時間那麼就可以交換,以便騰出更多的時間來逛更多的商店。
#include
#define int long long
#define lowbit(x) x&(-x)
using
namespace std;
#define it (int)
const
int n=
1e5+10;
int a[n]
,b[n]
,c[n]
,n,t,k;
priority_queue<
int> q1,q2;
priority_queue<
int,vector<
int>
,greater<
int>
>q3;
signed
main()
}else
if(q1.
size()
continue;if
(t1+a[i]
>t)
continue
;int rest=t-t1-a[i]
;while
(!q3.
empty()
&&q3.
top(
)top())
while
(!q2.
empty()
&&restwhile
(!q3.
empty()
&&rest>=t2+q3.
top())
if(rest>=t2&&k+it q2.
size()
>res)
}printf
("%d\n"
,res)
;}
51Nod 消滅兔子 (優先佇列)
消滅兔子 李陶冶 命題人 基準時間限制 1 秒 空間限制 131072 kb 分值 40 有n只兔子,每只有乙個血量b i 需要用箭殺死免子。有m種不同型別的箭可以選擇,每種箭對兔子的傷害值分別為d i 為p i 1 i m 假設每種箭只能使用一次,每只免子也只能被射一次,計算要消滅地圖上的所有兔子...
51Nod 活動安排問題(排序 優先佇列)
有若干個活動,第i個開始時間和結束時間是 si,fi 同乙個教室安排的活動之間不能交疊,求要安排所有活動,最少需要幾個教室?input 第一行乙個正整數n n 10000 代表活動的個數。第二行到第 n 1 行包含n個開始時間和結束時間。開始時間嚴格小於結束時間,並且時間都是非負整數,小於10000...
51nod 演算法馬拉松12 逛街 treap
做法 首先看找滿足 ci 的和等於 k 的位置.沒有則輸出 1.把掃到過的商店的bi值插入到treap裡面,暴力列舉lyk最後訪問的是當前的這個位置,用treap找剩下還能夠用的時間left 所能訪問的前面的商店的個數,更新答案.有乙個坑點就是k等於0的時候,re了幾次 include includ...