- gf24131 的博客
666,去参观补习班还会了几道指定题
- 2025-4-4 17:37:35 @
其一:旅行家的预算
#include<cstdio>
using namespace std;
int n,len=0;
struct LLLL{
double price;
double sum;
}l[10];
double s,c,dis,ans=0;
double d[10],p[10];
int main(){
scanf("%lf%lf%lf%lf%d",&s,&c,&dis,&p[0],&n);
for(int i=1;i<=n;i++) scanf("%lf%lf",&d[i],&p[i]);
l[0].sum=c;
l[0].price=p[0];
ans=c*p[0];
len++;
d[n+1]=s;
for(int i=1;i<(n+2);i++){
double lll=(d[i]-d[i-1])/dis;
double lll1=lll;
bool flag=1;
while(len){
if(l[0].sum<lll){
len--;lll-=l[0].sum;
for(int k=0;k<len;k++){
l[k].price=l[k+1].price;
l[k].sum=l[k+1].sum;
}
}
else{
l[0].sum-=lll;
flag=0;
break;
}
}
if(flag){
printf("No Solution");
return 0;
}
flag=1;
for(int j=0;j<len;j++){
if(p[i]<l[j].price){
ans-=(l[j].sum*l[j].price);
for(int k=j+1;k<len;k++){
l[j].sum+=l[k].sum;
ans-=(l[k].sum*l[k].price);
}
l[j].sum+=lll1;
l[j].price=p[i];
ans+=l[j].price*l[j].sum;
len=j+1;
flag=0;
break;
}
}
if(flag){
l[len].sum=lll1;
ans+=p[i]*lll1;
l[len].price=p[i];
len++;
}
}
printf("%.2lf",ans);
return 0; //华丽结束
}