代码如下
#include <bits/stdc++.h>
using namespace std;
double s,v,e,p,ans,x;
int d,n;
struct shop
{
double si;
double pi;
} a[10];
bool cmp(shop a,shop b);
int find(int o);
void move(shop pq);
void infer(int ai);
/*
int infind(int t,int o);
int cha(int l);*/
int chb(int g);
int main()
{
cin>>s>>v>>e>>p>>n;
// scanf("%llf%llf%llf%llf%d",&s,&v,&e,&p,&n);
a[0].si=0,a[0].pi=p;
for(int i=1; i<=n; ++i) cin>>a[i].si>>a[i].pi;
sort(a,a+n,cmp);
while(x<s) infer(find(d));
printf("%.2llf",ans);
return 0;
}
bool cmp(shop a,shop b)
{
return a.si<b.si;
}
int find(int o)
{
int minn=a[o].pi;
for(int i=o+1; i<=n; ++i)
if(minn>a[i].pi)
return i;
return o;
}
void move(shop pq)
{
ans+=(pq.si-x)/e*a[d].pi;
x=pq.si;
d=find(d);
}
/*
int infind(int t,int o)
{
int minn=a[o-1].pi;
for(int i=o-1; i>t; --i)
if(minn>a[i].pi)
return i;
}
int cha(int l)
{
int i=d;
while(a[i].si<=l) ++i;
return i-1;
}*/
int chb(int g)
{
int y=x+v*e;
int i=d,minn,s=d;
while(a[i].si<=y)
{
++i;
if(i-d==1||a[i].pi<=minn)
{
minn=a[i].pi;
s=i;
}
}
return s;
}
void infer(int t)
{
if(a[d+1].si-a[d].si>v*e)
{
printf("No Solution");
exit(0);
}
/* if(a[t].si==x)
{
x+=v*e;
ans+=v*a[t].pi;
d=cha(x);
}*/
/* else if(a[t].si-x>v*e)
{
move(chb(d));
}
else if(a[t].si-x<=v*e)
{
move(a[t]);
}*/
move(a[(a[t].si-x>v*e)?chb(d):t]);
return;
}