CF847D题解
我的解法
对于第 种狗粮,到这里的时间为 。
所以,如果 ,则刚到这盆狗粮时就可以吃了,反之,要等待 的时间。
每次选择狗粮前,要先把一定到不了的狗粮去掉,为了方便,我使用优先队列()来计入吃每一盆狗粮的时间(不包含过去的时间)。
代码
#include<bits/stdc++.h>
using namespace std;
priority_queue<int>dog;
int n,T,ans;
int main(){
scanf("%d%d",&n,&T);
for(int i=1;i<=n;i++){
while(!dog.empty()&&dog.top()>=T-i)
dog.pop();
int a;
scanf("%d",&a);
if(max(a,i)<T)
dog.push(max(a-i,0));
ans=max(ans,int(dog.size()));
}
return !printf("%d",ans);
}
建议自己写写,不要复制粘贴呀~

浙公网安备 33010602011771号