大佬们谁帮我改一下代码 玄关 题目链接
#include<bits/stdc++.h>
using namespace std;
int n;
double d1,c,d2,p;
struct y{
double jl;
double yj;
}yz[10];
bool cmp(y a,y b){
return a.jl<b.jl;
}
int main(){
scanf("%lf%lf%lf%lf%d",&d1,&c,&d2,&p,&n);
for(int i=1;i<=n;i++){
scanf("%lf%lf",&yz[i].jl,&yz[i].yj);
}
sort(yz+1,yz+1+n,cmp);
//无法直接到终点且加油站数量为0或无法到达最近的加油站
if(c*d2<d1&&(n==0||c*d2<yz[1].jl)){
printf("No Solution");
return 0;
}
double wz=0,dqyj=p,fy=0,dqyl=0;
while(wz!=d1){
int flag=0;
double minn=1e9+7;
//如果能到一个油价比目前低的加油站 就直接去
for(int i=1;i<=n;i++){
if(wz+d2*c>=yz[i].jl&&wz<yz[i].jl)minn=min(minn,yz[i].yj);
if(wz+d2*c>=yz[i].jl&&wz<yz[i].jl&&yz[i].yj<=dqyj){
if(dqyl>=(yz[i].jl-wz)/d2){//先用油箱里的油
dqyl-(yz[i].jl-wz)/d2;
}
else{
fy+=((yz[i].jl-wz)/d2-dqyl)*dqyj;//用完油箱
dqyl=0;
}
dqyj=yz[i].yj;
wz=yz[i].jl;
flag=1;
}
}
//不能去比当前更便宜的 则当前为最便宜 直接判断是否能到终点
if(wz+c*d2>=d1){
fy+=(d1-wz)/d2-dqyl;
printf("%.2lf",fy);
return 0;
}
//不能 则灌满当前油箱 到能到的最便宜的加油站再继续考虑
if(flag==0){
fy+=(c-dqyl)*dqyj;
dqyl=c;
for(int i=1;i<=n;i++){
if(yz[i].yj=minn){
flag=1;
dqyl-=(yz[i].jl-wz)/d2;
dqyj=yz[i].yj;
}
}
}
//没加油站且到不了终点
if(flag==0){
printf("No Solution");
return 0;
}
}
return 0;
}