#include<bits/stdc++.h>
using namespace std;
double a[200001];
int t[200001];
bool cmp(double a,double b){
return a>b;
}
int main (){
double l,v;//double是为了求T是避免取整
int n,i;
cin>>n>>l>>v;
for(i=1;i<=n;++i){
cin>>a[i];
}
sort(a+1,a+n+1,cmp);
int q;
cin>>q;
while(q!=0){//多组测试数据
int ans(0);
int ti;
cin>>ti;
if(l/v>ti){//特判情况1
cout<<0<<endl;
q--;
continue;
}
else if(l/v+a[1]/v>ti){//特判情况2
cout<<1<<endl;
q--;
continue;
}
else{
bool f=true;//判断是否符合题意
for(i=2;i<=n;i++){
double t1=0;
for(int j=i;j>=1;j--){
t1+=a[j]/v;//到达施法点所需时间累加
ans++;//魔法次数
}t1+=l/v;//加上最后一次到山顶
if(t1>ti){
cout<<ans<<endl;
f=false;
break;//判断
}
}if(f==true){//无解
cout<<"-1"<<endl;
}q--;
}
}
return 0;
}
从第十三个点开始WA,最后三个TLE
我真的没有学过二分。。。