#include<bits/stdc++.h>
using namespace std;
double d1,c,d2,p;
int n;
struct sb{
double dis,pri;
}a[10];
void search(double money,int x,double res)
{
double maxn=a[x].pri,minn=1e7;
if(x==n){
money+=double((double((d1-a[x].dis)/d2)-res)*a[x].pri);
printf("%.2lf",money);
return;
}
if(a[x+1].dis>a[x].dis+c*d2)
{
printf("No Solution");
return;
}
int i=x+1,k,l;
while(a[i].dis<=a[x].dis+c*d2&&i<=n)
{
if(a[i].pri<maxn)
{
maxn=a[i].pri;
k=i;
break;
}
if(a[i].pri<minn)
{
minn=a[i].pri;
l=i;
}
i++;
}
if(maxn==a[x].pri)
{
money+=double((c-res)*a[x].pri);
res=c-double((a[l].dis-a[x].dis)/d2);
search(money,l,res);
}
else {
money+=double((double((a[k].dis-a[x].dis)/d2)-res)*a[x].pri);
cout<<money<<" "<<k<<" "<<res<<endl;
search(money,k,0);
}
return;
}
int main()
{
cin>>d1>>c>>d2>>p>>n;
if(n==0)
{
if(c*d2<d1)
printf("No Solusion");
else printf("%.2lf",d1/d2*p);
return 0;
}
a[0].pri=p;
for(int i=1;i<=n;i++)
cin>>a[i].dis>>a[i].pri;
search(0,0,0);
}
第四组数据
87.75 13.03 5.75 7.29 3
22.10 7.38
24.21 6.81
82.08 6.96
正确答案 105.95,我的105.65