PAT A1033 to fill or not to fill(25)
2017-02-19 16:30
183 查看
这道题写的我很难受。。。
#include<cstdio>
#include<algorithm>
using namespace std;
int INF=99999;
struct sta{
float price;
float dis;
}stat[505];
int cmp(sta a,sta b){
return a.dis<b.dis;
}
int main(){
int c,d,dav,n,tag=0;
float price=0;
scanf("%d%d%d%d",&c,&d,&dav,&n);
int i;
for(i=0;i<n;i++){
scanf("%f%f",&stat[i].price,&stat[i].dis);
}
sort(stat,stat+n,cmp);
if(stat[0].dis!=0){
printf("The maximum travel distance = 0.00");
return 0;
}
float maxd=0;
int d1=stat[0].dis,d2,leftd=d;
for(i=1;i<n;i++){
d2=stat[i].dis;
if((d2-d1)>(c*dav)){//can't arrive
maxd += c*dav;
tag=1;
break;
}else{
maxd += (d2-d1);
d1=stat[i].dis;
}
}
if(tag==0){
d2=d;
if((d2-d1)>(c*dav)){//can't arrive
maxd += c*dav;
tag=1;
}
}
if(tag==1) printf("The maximum travel distance = %.2f",maxd);
int run = c*dav,k;
float tank=0,minp=INF;
if(tag==0){// count price
i=0;
while(i<n-1){
minp=INF;
for(int j=i+1;j<n && (stat[j].dis-stat[i].dis)<= (c*dav);j++){
if(stat[j].price<minp){
minp=stat[j].price;
k=j;
}
if(stat[j].price<stat[i].price){
k=j;
// add oil
break;
}
}
if(minp>stat[i].price && (d-stat[i].dis)> (c*dav)){
// add full oil
price += (c-tank)*stat[i].price;
tank=c;
}else if(minp>stat[i].price && (d-stat[i].dis)<= (c*dav)){
price += (d-stat[i].dis-tank*dav)/dav * stat[i].price;
printf("%.2f",price);
return 0;
}
else{
price += (stat[k].dis-stat[i].dis-tank*dav)/dav*stat[i].price;
tank += (stat[k].dis-stat[i].dis-tank*dav)/dav;
}
tank -=(stat[k].dis-stat[i].dis)/dav;//arrive k
i=k;
}
price += (d-stat[i].dis)/dav * stat[i].price;
printf("%.2f",price);
}
return 0;
}
#include<cstdio>
#include<algorithm>
using namespace std;
int INF=99999;
struct sta{
float price;
float dis;
}stat[505];
int cmp(sta a,sta b){
return a.dis<b.dis;
}
int main(){
int c,d,dav,n,tag=0;
float price=0;
scanf("%d%d%d%d",&c,&d,&dav,&n);
int i;
for(i=0;i<n;i++){
scanf("%f%f",&stat[i].price,&stat[i].dis);
}
sort(stat,stat+n,cmp);
if(stat[0].dis!=0){
printf("The maximum travel distance = 0.00");
return 0;
}
float maxd=0;
int d1=stat[0].dis,d2,leftd=d;
for(i=1;i<n;i++){
d2=stat[i].dis;
if((d2-d1)>(c*dav)){//can't arrive
maxd += c*dav;
tag=1;
break;
}else{
maxd += (d2-d1);
d1=stat[i].dis;
}
}
if(tag==0){
d2=d;
if((d2-d1)>(c*dav)){//can't arrive
maxd += c*dav;
tag=1;
}
}
if(tag==1) printf("The maximum travel distance = %.2f",maxd);
int run = c*dav,k;
float tank=0,minp=INF;
if(tag==0){// count price
i=0;
while(i<n-1){
minp=INF;
for(int j=i+1;j<n && (stat[j].dis-stat[i].dis)<= (c*dav);j++){
if(stat[j].price<minp){
minp=stat[j].price;
k=j;
}
if(stat[j].price<stat[i].price){
k=j;
// add oil
break;
}
}
if(minp>stat[i].price && (d-stat[i].dis)> (c*dav)){
// add full oil
price += (c-tank)*stat[i].price;
tank=c;
}else if(minp>stat[i].price && (d-stat[i].dis)<= (c*dav)){
price += (d-stat[i].dis-tank*dav)/dav * stat[i].price;
printf("%.2f",price);
return 0;
}
else{
price += (stat[k].dis-stat[i].dis-tank*dav)/dav*stat[i].price;
tank += (stat[k].dis-stat[i].dis-tank*dav)/dav;
}
tank -=(stat[k].dis-stat[i].dis)/dav;//arrive k
i=k;
}
price += (d-stat[i].dis)/dav * stat[i].price;
printf("%.2f",price);
}
return 0;
}
相关文章推荐
- 1033. To Fill or Not to Fill (25)【贪心+模拟】——PAT (Advanced Level) Practise
- 25-题目1437:To Fill or Not to Fill
- PAT 1047 To Fill or Not to Fill (25)(高速公路加油问题)
- 1033. To Fill or Not to Fill (25)解题报告
- 1033.To Fill or Not to Fill (25)
- 1033. To Fill or Not to Fill (25)
- 题目25:To Fill or Not to Fill
- 1033 . To Fill or Not to Fill (25) (想明白了没写出来,参考吧)
- 1033. To Fill or Not to Fill (25)加油站
- 题目1437:To Fill or Not to Fill 题目25
- 1033. To Fill or Not to Fill (25)
- 1033. To Fill or Not to Fill (25)
- 1033. To Fill or Not to Fill (25)
- 【C++】PAT (advanced level)1033. To Fill or Not to Fill (25)*
- 1033. To Fill or Not to Fill (25)-PAT
- 1033. To Fill or Not to Fill (25)
- 1033. To Fill or Not to Fill (25)
- 1033. To Fill or Not to Fill (25)
- 1033. To Fill or Not to Fill (25) -贪心算法
- 1033. To Fill or Not to Fill (25)