1.思路应该是正确的:
先把魔法给从小到大排序,
再用一次性登顶的年数与询问的年数求差,
最后用这个差减去每个魔法除以速度的值。
2.代码肯定是错误的:
#include <iostream>
#include <algorithm>
using namespace std;
double a[200001],b[200001];
double q,t;
int cmp(double x,double y)
{
return x>y;
}
int main()
{
int n,l,v;
cin>>n>>l>>v;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
sort(a+1,a+n+1,cmp);
b[0]=l/v;
for(int i=1;i<=n;i++){
b[i]=a[i]*1.0/v+b[i-1];
}
cin>>q;
while(q--)
{
cin>>t;
if(b[n]<=t)
{
cout<<-1<<endl;
continue;
}
int l=0,r=n,ans=0;
while(l<=r)
{
int mid=(l+r)>>1;
if(b[mid]>t)
{
ans=mid;
r=mid-1;
}
else
{
l=mid+1;
}
}
cout<<ans<<endl;
}
return 0;
}
3.题解在哪儿打呀,求助!!!