社区讨论
第5测试点错了 大佬看看吧!
P1016[NOIP 1999 普及组/提高组] 旅行家的预算参与者 2已保存回复 2
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 2 条
- 当前快照
- 1 份
- 快照标识符
- @m5scb2cd
- 此快照首次捕获于
- 2025/01/11 23:27 去年
- 此快照最后确认于
- 2025/11/04 11:44 4 个月前
求求了看看吧第5测试点错了
CPP#include<bits/stdc++.h>
using namespace std;
struct pp{
double d,p;//结构体
}a[10];
double km,c,kml,m,ans;
int n;
bool cmp(pp qqq,pp www){
return qqq.d<www.d;//结构体排序
}
int main(){
cin>>km>>c>>kml>>m>>n;
a[0].d=0;
a[0].p=m;
a[n+1].d=km;
a[n+1].p=0;//初始化,把单独数据归入整体
for(int i=1;i<=n;i++){
cin>>a[i].d>>a[i].p;
}
sort(a+1,a+1+n,cmp);
for(int i=1;i<=n+1;i++){
if(a[i].d-a[i-1].d>c*1.0*kml){
cout<<"No Solution";
return 0;
}
}
int sum=0;//上次标记的加油站
double sum1=m,sum2=0;//sum点的油价,sum离起点多少km
for(int i=1;i<=n+1;i++){
if(a[i+1].d-sum2>c*1.0*kml){//如果走不到下个加油站
ans+=a[sum].p*1.0*((a[i].d-sum2)/kml);//加的钱数
sum=i;
sum1=a[i].p;
sum2=a[i].d;//标记这个点
continue;
}
if(a[i].p<=sum1){//如果比上个标记的加油站便宜
ans+=a[sum].p*1.0*((a[i].d-sum2)/kml);//加的钱数
sum=i;
sum1=a[i].p;
sum2=a[i].d;//标记这个加油站
}
}
printf("%.2lf",ans);//输出
return 0;
}
回复
共 2 条回复,欢迎继续交流。
正在加载回复...