5.9
洛谷P6473 [NOI Online #2 入门组] 未了
使用魔法次数越多,西西弗斯到达山顶的时间越久。
二分答案。
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int n,L,v,a[200010],Q;
double q,t[200010];
bool cmp(int x,int y){
return x>y;
}
int main()
{
cin>>n>>L>>v;
for(int i=1;i<=n;i++)
cin>>a[i];
sort(a+1,a+1+n,cmp);//从大到小排,先使用最大的魔法(贪心)
//求出使用前i次魔法的时间:
t[0]=1.0*L/v; //*1.0!!!
for(int i=1;i<=n;i++)
t[i]=t[i-1]+1.0*a[i]/v; //*1.0!!!
cin>>Q;
while(Q--){
cin>>q;
if(t[n]<=q){ //使用所有魔法都不行
cout<<-1<<endl;
continue;
}
int l=-1,r=n+1;
while(l+1<r){
int mid=(l+r)/2;
if(t[mid]>q)
r=mid;
else
l=mid;
}
cout<<r<<endl;
}
return 0;
}
最开始没×1.0,于是找了1.5小时的bug:
哈哈。。