社区讨论
测试点5WA 爸爸救救
P1016[NOIP 1999 普及组/提高组] 旅行家的预算参与者 2已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @lw66iddl
- 此快照首次捕获于
- 2024/05/14 17:16 2 年前
- 此快照最后确认于
- 2024/05/14 20:12 2 年前
CPP
#include<bits/stdc++.h>
using namespace std;
double d1,c,d2,maxn,ans,last;
int n,now;
struct GGBond{
double d,p;
}o[10];
bool tmp(GGBond a,GGBond b){
return a.p<b.p;
}
int main(){
cin>>d1>>c>>d2>>o[0].p>>n;
for(int i=1;i<=n;i++) cin>>o[i].d>>o[i].p;
sort(o+1,o+1+n,tmp);
maxn=c*d2,o[n+1].d=d1;
for(int i=0;i<=n;i++){
if(o[i].d-o[i-1].d>maxn){
printf("No Solution");
return 0;
}
}
while(1){
bool flag=false;
int next,k;
double minn=510;
for(int i=now+1;i<=n && o[i].d-o[now].d<=maxn;i++){
if(o[i].p<=o[now].p && !flag){
ans+=((o[i].d-o[now].d)/d2-last)*o[now].p;
next=i,last=0;
flag=true;
break;
}
if(minn>o[i].p) minn=o[i].p,k=i;
}
if(!flag){
if(d1-o[now].d<=maxn){
ans+=((d1-o[now].d)/d2-last)*o[now].p;
break;
}else{
ans+=(c-last)*o[now].p;
last=c-(o[k].d-o[now].d)/d2;
next=k;
}
}
now=next;
}
cout<<fixed<<setprecision(2)<<ans;
return 0;
}
测试点5输入:
200.0 100.0 2.0 4.00 2
50.0 3.00
60.0 2.00
正确输出:
255.00
我的输出:
260.00
QQQQAQQQQ
回复
共 1 条回复,欢迎继续交流。
正在加载回复...