求
  • 板块灌水区
  • 楼主guowenxuan101
  • 当前回复1
  • 已保存回复1
  • 发布时间2023/7/14 17:04
  • 上次更新2023/11/3 09:52:00
查看原帖
求
983671
guowenxuan101楼主2023/7/14 17:04

P1016 [NOIP1999 提高组] 旅行家的预算 必回关谢谢

#include<bits/stdc++.h>
using namespace std;
double d1;//两个城市之间的距离
double c;//汽车油箱的容量  
double d2;//每升汽油能行驶的距离 
double p;//出发点每升汽油价格
int n;//沿途油站数油站
double di[10000];//离出发点的距离 
double pi[10000];//每升汽油价格
double yjy;
double gwx;
double s;//剩下的 
int main(){
    cin >> d1 >> c>> d2 >> p >> n;
    for(int i=1;i<=n;i++){
        cin >> di[i] >> pi[i];
    }
    di[n+1]=d1;//目的地
    pi[0]=p;
    gwx=d2*c;
    int m,q;//后面有用 
    int j;
    for(int i=1;i<=n;i++){
        if(di[i+1]-di[i]>gwx){
            cout << "No Solution";
            return 0;
        }
    }
    for(int i=0;i<=n;i=j){//所在加油站 
        for(j=i+1;j<=n+1;j++){//下一个加油站 
            if(di[j]-di[i]>gwx){
                j--;
                break;
            }
            if(pi[j]<pi[i]){
                m=j;
                q=i; 
                break;//如果更便宜就退出 
            }
        }
        if(pi[m]<pi[q]){//已经排除了所有到达不了的情况,直接if就可以 
            yjy+=((di[m]-di[q])/d2-s)*pi[q];
            s = 0;
        }else{
            yjy+=(c-s)*pi[q];
            s=c-(di[m]-di[q])/d2;
        }

    }
    printf("%.2lf",yjy);
    return 0;
}
2023/7/14 17:04
加载中...